mysql无独立权限配置文件,权限全存于mysql系统库表中;my.cnf仅控制启动参数,不参与权限校验,所有授权须通过create user+grant等sql操作并刷新。

MySQL 没有独立的“权限配置文件”——权限信息全部存于系统库 mysql 表中,不能通过外部配置文件(如 my.cnf)直接设置用户权限。
为什么 my.cnf 不能设权限
MySQL 的 my.cnf(或 my.ini)只控制服务启动参数、网络、存储引擎、日志等运行时行为,不参与权限校验逻辑。所有 GRANT/REVOKE 操作最终都写入:mysql.user、mysql.db、mysql.tables_priv 等系统表。
- 试图在
my.cnf里写user = 'xxx'或grant_priv = ON完全无效,mysqld 启动时会忽略这些非法选项 - 修改
my.cnf后重启,不会恢复或覆盖已有权限;旧权限仍保留在磁盘表中 - 唯一与“配置文件+权限”相关的场景是:用
skip-grant-tables跳过权限检查(仅用于紧急修复,非正常授权方式)
真正生效的权限持久化方式
权限必须通过 SQL 命令操作,并显式刷新(部分版本需):
TURF(开源)权限定制管理系统(以下简称“TURF系统”),是蓝水工作室推出的一套基于软件边界设计理念研发的具有可定制性的权限管理系统。TURF系统充分考虑了易用性,将配置、设定等操作进行了图形化设计,完全在web界面实现,程序员只需在所要控制的程序中简单调用一个函数,即可实现严格的程序权限管控,管控力度除可达到文件级别外,还可达到代码级别,即可精确控制到
- 用
CREATE USER+GRANT创建并赋权,例如:CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'pwd123';<br>GRANT SELECT, INSERT ON mydb.orders TO 'app'@'192.168.1.%';<br>FLUSH PRIVILEGES;
-
GRANT语句本身会自动更新系统表,但某些旧版本(如 MySQL 5.7 之前)或特殊部署下,仍建议执行FLUSH PRIVILEGES - 权限变更后,已连接的客户端不会实时感知,新连接才按最新权限校验
- 导出权限可借助
mysqldump mysql.user mysql.db ...,但恢复时不能直接导入(涉及加密字段和触发器),应使用SHOW GRANTS FOR ...生成可重放的 SQL
配置文件里能影响权限行为的几个关键项
虽然不能设权限,但以下 my.cnf 选项会间接改变权限校验效果:
-
skip-grant-tables:完全禁用权限系统,任何用户免密登录且拥有全部权限(危险!仅限本地修复) -
require_secure_transport = ON:强制要求 SSL 连接,否则即使密码正确也拒绝访问(属于连接层限制,非权限表控制) -
default_authentication_plugin = 'caching_sha2_password':影响新用户的默认认证方式,老客户端可能因不支持而报Authentication plugin 'caching_sha2_password' cannot be loaded -
bind-address = '127.0.0.1':限制仅本地访问,从网络层面减少未授权连接可能(不是权限,但常被误当作“权限控制”)
真正要批量管理权限,得靠脚本解析 SHOW GRANTS 输出、或用 mysqlpump --exclude-databases=% --users 备份权限结构。把权限当“代码”维护,而不是指望某个配置文件自动同步。









