导读:本期聚焦于小伙伴创作的《mysql如何批量导出所有用户的权限设置脚本_查询mysql.user表生成SQL》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《mysql如何批量导出所有用户的权限设置脚本_查询mysql.user表生成SQL》有用,将其分享出去将是对创作者最好的鼓励。

在mysql数据库的日常运维和迁移场景中,批量导出所有用户的权限设置是高频需求,通过查询系统库中的mysql.user表,我们可以快速获取所有用户的基础权限信息,进而生成可重复执行的权限SQL脚本。

mysql如何批量导出所有用户的权限设置脚本_查询mysql.user表生成SQL

mysql.user表核心权限字段说明

mysql.user表存储了mysql实例中所有用户的全局权限信息,不同版本的字段略有差异,但核心权限字段的命名规则一致,基本都是xxx_priv的格式,取值为Y代表拥有该权限,N代表没有该权限。常见的核心权限字段如下:

  • 用户标识字段user存储用户名,host存储用户允许登录的客户端地址
  • 基础权限字段select_privinsert_privupdate_privdelete_priv对应增删改查权限
  • 管理权限字段create_privdrop_privgrant_privsuper_priv对应库表创建、权限授予、超级管理员权限

批量生成权限SQL的实现逻辑

生成批量权限脚本的核心思路是:先查询mysql.user表获取所有用户的基础信息,再遍历每个用户的权限字段,拼接对应的GRANT语句,最后输出完整的可执行的SQL脚本。需要注意要排除mysql内置的默认用户,避免生成无用的权限语句。

基础权限导出脚本示例

以下脚本可以查询所有非内置用户的基础全局权限,生成对应的GRANT语句:

-- 查询mysql.user表生成批量权限导出SQL
SELECT 
  CONCAT(
    'GRANT ',
    -- 拼接所有权限项
    IF(select_priv = 'Y', 'SELECT,', ''),
    IF(insert_priv = 'Y', 'INSERT,', ''),
    IF(update_priv = 'Y', 'UPDATE,', ''),
    IF(delete_priv = 'Y', 'DELETE,', ''),
    IF(create_priv = 'Y', 'CREATE,', ''),
    IF(drop_priv = 'Y', 'DROP,', ''),
    IF(grant_priv = 'Y', 'GRANT OPTION,', ''),
    IF(super_priv = 'Y', 'SUPER,', ''),
    -- 去除末尾多余的逗号
    SUBSTRING(
      CONCAT(
        IF(select_priv = 'Y', 'SELECT,', ''),
        IF(insert_priv = 'Y', 'INSERT,', ''),
        IF(update_priv = 'Y', 'UPDATE,', ''),
        IF(delete_priv = 'Y', 'DELETE,', ''),
        IF(create_priv = 'Y', 'CREATE,', ''),
        IF(drop_priv = 'Y', 'DROP,', ''),
        IF(grant_priv = 'Y', 'GRANT OPTION,', ''),
        IF(super_priv = 'Y', 'SUPER,', '')
      ),
      1,
      LENGTH(
        CONCAT(
          IF(select_priv = 'Y', 'SELECT,', ''),
          IF(insert_priv = 'Y', 'INSERT,', ''),
          IF(update_priv = 'Y', 'UPDATE,', ''),
          IF(delete_priv = 'Y', 'DELETE,', ''),
          IF(create_priv = 'Y', 'CREATE,', ''),
          IF(drop_priv = 'Y', 'DROP,', ''),
          IF(grant_priv = 'Y', 'GRANT OPTION,', ''),
          IF(super_priv = 'Y', 'SUPER,', '')
        )
      ) - 1
    ),
    ' ON *.* TO ''',
    user,
    '''@''',
    host,
    ''' IDENTIFIED BY ''用户密码'';'
  ) AS grant_sql
FROM mysql.user
-- 排除内置默认用户
WHERE user NOT IN ('mysql.session', 'mysql.sys', 'root')
  AND host NOT IN ('localhost', '127.0.0.1')
;

脚本使用注意事项

  • 上述脚本中的IDENTIFIED BY ''用户密码''部分需要替换成用户实际的密码,mysql5.7及以上版本密码存储在authentication_string字段,低版本存储在password字段,需要根据实际版本调整
  • 如果用户有库级或者表级的权限,需要额外查询mysql.dbmysql.tables_priv表,按照同样的拼接逻辑生成对应权限语句
  • 生成的SQL脚本可以直接在目标mysql实例中执行,快速还原所有用户的权限配置

权限导出结果验证

执行上述查询后,会得到类似如下的输出结果,每一行都是一条完整的GRANT语句:

GRANT SELECT,INSERT,UPDATE ON *.* TO 'test_user'@'192.168.0.%' IDENTIFIED BY '用户密码';
GRANT CREATE,DROP,SUPER ON *.* TO 'admin_user'@'%' IDENTIFIED BY '用户密码';

可以将这些结果导出为.sql文件,在需要恢复权限的场景下直接执行即可,大幅提升权限管理的效率。

mysql权限导出查询mysql_user表SQL生成脚本用户权限管理修改时间:2026-07-20 12:42:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。