讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在MySQL中批量导出并导入所有用户的权限配置脚本

星浩酱_7833

星浩酱_7833

发布时间:2026-11-05 09:53:48

|

580人浏览过

|

来源于php中文网

原创

导出用户权限的正确方式是用 mysqldump 导出 mysql 系统库中 user、db、tables_priv 等权限表,并手动清理 authentication_string 等敏感字段;导入前需调整 sql_mode、分离 CREATE USER 与 GRANT、验证版本兼容性,且必须执行 FLUSH PRIVILEGES 并用实际账号测试连接与权限。

如何在mysql中批量导出并导入所有用户的权限配置脚本

导出所有用户权限的正确方式是用 mysqldump 配合 --no-data --skip-triggers

直接查 mysql.user 或 mysql.db 表再拼 SQL 是危险且不完整的——MySQL 8.0+ 的角色、动态权限(如 APPLICATION_PASSWORD_ADMIN)、列级权限、存储过程权限等都不会被覆盖。官方推荐路径是导出 mysql 系统库的权限相关表结构 + 数据,但只取权限部分。

实际操作中更稳妥的是用 mysqldump 导出权限元数据表,并过滤掉密码哈希和主机 wildcard 冲突风险:

  • mysqldump -u root -p --no-data mysql user db tables_priv columns_priv procs_priv proxies_priv:先导出建表语句,确认字段兼容性
  • mysqldump -u root -p --skip-triggers --compact --skip-extended-insert mysql user db tables_priv columns_priv procs_priv proxies_priv > grant_backup.sql:导出可读性强、便于人工检查的单行 INSERT
  • 导出后务必手动删掉 user 表中的 authentication_string 和 password_last_changed 字段值(保留 NULL 或空字符串),否则导入会覆盖目标实例的密码策略

导入前必须停用 sql_mode=NO_AUTO_CREATE_USER 并检查 MySQL 版本兼容性

MySQL 5.7 默认启用 NO_AUTO_CREATE_USER,而导出的 GRANT 语句若含 IDENTIFIED BY 会报错 ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option 类似提示——其实不是跳过权限表,而是该 sql_mode 禁止在 GRANT 中隐式创建用户。

解决方法分两步:

  • 导入前执行 SET sql_mode=(SELECT REPLACE(@@sql_mode,'NO_AUTO_CREATE_USER',''));(MySQL 5.7.21+ 支持)
  • 或改用 CREATE USER IF NOT EXISTS + GRANT 分离写法:先从 grant_backup.sql 中提取所有 CREATE USER 语句(grep 'CREATE USER'),单独执行;再执行其余 GRANT 语句
  • MySQL 8.0 导出的脚本不能直接导入 5.7:password_history、password_reuse_interval 等字段不存在,需提前 sed 删除对应列和值

用 SELECT ... INTO OUTFILE 手动拼 SHOW GRANTS 脚本仅适合简单场景

如果只要快速重建几个核心账号(比如 app_user@'%'、backup@'10.0.0.%'),比 dump 系统表更轻量的方式是生成标准 GRANT 语句:

MySQL8 CRM Schema Design Expert
MySQL8 CRM Schema Design Expert

面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。

下载
SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') 
FROM mysql.user 
WHERE user NOT IN ('mysql.infoschema','mysql.session','mysql.sys') 
  AND host != 'localhost';

把结果复制进客户端逐条执行,再用 sed 's/^Grants for /-- /' | sed 's/$/;/' 整理成可执行脚本。但注意:

  • SHOW GRANTS 不返回角色绑定关系(SET DEFAULT ROLE)、资源组权限、密码历史策略
  • 输出中若含 IDENTIFIED WITH caching_sha2_password AS '$A$...',导入时需确保目标实例已加载对应认证插件,否则报错 ERROR 1410 (42000): You are not allowed to create a user with GRANT
  • 该方式无法还原 INFORMATION_SCHEMA 级别权限(如 SELECT ON INFORMATION_SCHEMA.STATISTICS),因为 SHOW GRANTS 不显示这类权限

权限导入后必须执行 FLUSH PRIVILEGES 且验证连接而非仅看语句是否成功

即使所有 GRANT 语句都返回 Query OK,权限也不会立即生效——MySQL 权限缓存不会自动刷新。漏掉这步会导致新用户连得上但执行 SELECT 报 ERROR 1142 (42000): SELECT command denied。

验证要点很具体:

  • 不要只用 root 用户验证,要用刚导入的用户账号(如 mysql -u app_user -p -h 127.0.0.1)实连测试
  • 对多主机账号(如 dev_user@'192.168.1.%'),必须从对应网段 IP 连接,不能只测 localhost
  • 若目标实例开启了 require_secure_transport=ON,而导出账号没配 REQUIRE SSL,连接会直接拒绝,此时要补 ALTER USER ... REQUIRE SSL

真正麻烦的从来不是导出或导入语句本身,而是权限生效路径依赖于客户端连接方式、主机解析顺序、SSL 配置、甚至 PAM 插件状态——这些细节不会出现在任何一条 GRANT 语句里。

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2493

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1499

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

875

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3532

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

6108

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1299

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6371

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

5482

2023.08.14

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 194人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn