phpmyadmin批量导出用户权限需勾选“用户账户”页多个用户并点击“导出所选用户”,但默认不包含密码哈希且不兼容mysql 8.0+认证插件,需手动将identified by替换为identified with caching_sha2_password by或mysql_native_password by,并补全with grant option;若权限不足需启用“允许运行多个查询”并确保create user权限,执行后须检查host匹配性及执行flush privileges。
phpmyadmin里怎么批量导出多个用户的权限sql
直接在 phpmyadmin 界面点“用户账户”页,勾选多个用户后点击“导出所选用户”,它会生成 create user 和 grant 语句。但注意:这个功能默认只导出「当前选中用户」的权限,不包含密码哈希(password() 已废弃)、不兼容 mysql 8.0+ 的认证插件写法。
常见错误是导出后直接执行报错 ERROR 1827 (HY000): The password hash doesn't have the expected format,因为 phpMyAdmin 7.x 默认用 IDENTIFIED BY 明文密码,而 MySQL 8.0 要求用 IDENTIFIED WITH caching_sha2_password BY 'xxx'。
- 导出前先确认目标 MySQL 版本,8.0+ 用户必须手动替换
IDENTIFIED BY为IDENTIFIED WITH caching_sha2_password BY - 如果用户用的是
mysql_native_password插件(比如旧应用兼容需求),得显式写成IDENTIFIED WITH mysql_native_password BY 'xxx' - 导出的
GRANT语句不含WITH GRANT OPTION,若原用户有此权限,需手动补上
用 SELECT 拼接生成多账号 CREATE + GRANT 语句(最可控)
绕过 phpMyAdmin 导出限制,直接查 mysql.user 和 mysql.db 表拼 SQL,适合需要精确控制字段、跳过系统用户、或批量加前缀/后缀的场景。
例如生成所有非 root、非 debian-sys-maint 用户的建库授权语句:
SELECT CONCAT(
'CREATE USER ''', user, '''@''', host, ''' IDENTIFIED WITH caching_sha2_password BY ''', authentication_string, ''';',
' GRANT SELECT,INSERT ON `', SUBSTRING_INDEX(user, '_', 1), `_db`.* TO ''`, user, '''@''', host, ''';'
) AS sql_stmt
FROM mysql.user
WHERE user NOT IN ('root', 'debian-sys-maint')
AND user REGEXP '^[a-z0-9_]+$';
关键点:
-
authentication_string是加密后的密码,不能直接当明文用;如需重置密码,得用PASSWORD('newpass')(5.7)或'newpass'(8.0+,由插件处理) - MySQL 8.0+ 必须用
mysql.user.authentication_string,5.7 用mysql.user.password(已弃用) - 拼
GRANT前先查mysql.db或INFORMATION_SCHEMA.role_table_grants,避免硬编码库名
执行批量 SQL 时权限不足或语法报错怎么办
常见报错 ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation,说明当前登录账号没开 CREATE USER 权限——即使你是 root,也可能被 phpMyAdmin 的配置限制了。
解决路径很实际:
- 进 phpMyAdmin 左侧选「phpmyadmin」数据库 → 「SQL」页,运行
SHOW GRANTS FOR CURRENT_USER;看实际权限 - 如果缺
CREATE USER或RELOAD,得让 DBA 在命令行用mysql -u root -p执行GRANT CREATE USER ON *.* TO 'your_user'@'host'; FLUSH PRIVILEGES; - 批量执行含
CREATE USER的 SQL 时,phpMyAdmin 默认关掉「允许运行多个查询」,得在设置里打开「SQL 查询」→「允许运行多个查询」 - MySQL 8.0+ 的
CREATE USER不允许空密码,语句里不能写IDENTIFIED BY '',要写IDENTIFIED WITH caching_sha2_password BY 'x'再改
复制配置后权限没生效?检查 host 匹配和 FLUSH
执行完 CREATE USER 和 GRANT,立刻用新账号连不上,大概率是 host 字段不匹配或没刷新权限表。
典型坑:
- 用户表里
host是localhost,但你用127.0.0.1连——这两个在 MySQL 里是不同 host,得分别授权 - 执行完
GRANT后忘了FLUSH PRIVILEGES;(虽然多数情况自动刷新,但跨账号批量操作时建议显式加) - phpMyAdmin 缓存了旧权限,退出重登,或清浏览器 cookie 再试
- 用
SELECT User,Host FROM mysql.user;确认用户是否真写进去了,别只信「成功」提示
最麻烦的其实是 host 通配符:比如 'user'@'%' 能连远程,但 'user'@'192.168.%' 不能连本地,这种细节一漏就得重跑一遍。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











