phpMyAdmin 4.9 不支持直接导出用户权限,所谓“导出权限”实为手动执行 SHOW GRANTS FOR 'user'@'host' 并复制结果;系统禁用 mysql.user 等表导出,避免密码哈希误用和版本兼容问题,唯一可靠方式是逐条执行 SHOW GRANTS、全选复制保存为 SQL 文件。

phpMyAdmin 4.9 没有直接导出用户权限的按钮
它不提供「导出权限」专用功能,所谓“导出权限”本质是导出 SHOW GRANTS FOR 'user'@'host' 的结果——即把 MySQL 的权限语句生成为可复用的 SQL。phpMyAdmin 4.9 的 Export 界面只面向数据库/表结构与数据,对 mysql 系统库(含 mysql.user、mysql.db 等)默认禁止导出,防止误操作泄露权限配置。
手动执行 SHOW GRANTS 并复制结果最可靠
这是唯一能拿到干净、可执行权限语句的方式,且完全绕过 phpMyAdmin 导出逻辑的限制:
- 在左上角 SQL 标签页中,输入类似语句:
SHOW GRANTS FOR 'myapp'@'localhost';(注意替换为真实用户名和 host) - 点击「执行」,结果区会显示类似
GRANT SELECT, INSERT ON `mydb`.* TO 'myapp'@'localhost';的多条语句 - 全选结果 → 右键复制 → 粘贴到文本编辑器中保存为
grants_myapp.sql - 若需导出多个用户,逐个执行
SHOW GRANTS并追加内容;不要拼接多个FOR到一条语句里,MySQL 不支持
为什么不能导出 mysql.user 表本身?
即使你强行切换到 mysql 数据库并点「导出」,phpMyAdmin 4.9 也会拦截或返回空结果:
-
mysql.user是系统表,4.9 版本默认禁用对其的 SELECT 权限检查(即使你有权限),UI 层直接隐藏导出入口 - 即使绕过 UI 手动构造导出请求,生成的 SQL 中
INSERT INTO mysql.user在目标库恢复时几乎必然失败:字段顺序、加密方式(authentication_stringvspassword)、插件字段(如plugin)在不同 MySQL 版本间差异极大 - 直接导出表数据会导致密码哈希被当作明文字符串处理,恢复后用户无法登录
mysqldump 是唯一支持权限导出的命令行方案
如果你需要自动化或批量导出权限,必须用 mysqldump,且仅限导出权限相关语句(不是整个 mysql 库):
立即学习“PHP免费学习笔记(深入)”;
- 执行:
mysqldump -u root -p --no-data --skip-triggers --skip-routines --databases mysql --tables user db tables_priv columns_priv procs_priv --where="User='myapp' AND Host='localhost'" > grants_myapp.sql - 关键点:
--no-data确保不导出实际行数据,--where过滤指定用户,--tables限定只涉及权限的几张表 - 但注意:该输出仍是原始表数据 INSERT 语句,**不可直接导入**;必须配合
mysql -e "SELECT ... FROM mysql.user WHERE ..."或解析为GRANT语句才安全 - 真正生产可用的做法仍是先
SHOW GRANTS,再用脚本转成CREATE USER + GRANT组合(MySQL 5.7+ 支持)
真正能落地的权限备份,从来不是“导出一张表”,而是“捕获一组 GRANT 语句”。phpMyAdmin 4.9 的界面设计决定了它不会帮你跨过这道坎——你得亲手执行、亲手复制、亲手验证是否包含 WITH GRANT OPTION 或 GRANT PROXY 这类易被忽略的高危权限。



















