mysql环境搭建后权限如何分配_mysql权限规划说明

16次阅读

MySQL 权限需按角色分层管控:root 仅用于初始化与灾备,应用账号限 SELECT/INSERT/UPDATE/DELETE,运维账号可查状态但不可访问业务数据,开发账号仅限开发库;须禁用远程 root、定期审计高危权限、绑定 IP、设密码过期策略,并通过 FLUSH PRIVILEGES 和 SHOW GRANTS 验证。

mysql 环境搭建后权限如何分配_mysql 权限规划说明

MySQL 安装完成后,权限不能全给 root,也不能全不给——得按角色分清楚,谁该看什么、能改哪些、能不能删库,必须提前规划好。

基础权限分层原则

权限设计要遵循最小必要原则:只给业务实际需要的权限,不因图省事而授予权限过大。

  • 超级管理员(如 root):仅用于初始化、灾备恢复、全局配置调整,日常不登录使用
  • 应用账号:限定到具体数据库,只开放 SELECT/INSERT/UPDATE/DELETE,禁用 DROP、CREATE、ALTER、GRANT 等高危操作
  • 运维账号:可查性能状态(SHOW PROCESSLIST、SHOW STATUS)、管理慢日志、执行备份命令,但不可访问业务数据表
  • 开发 / 测试账号:仅限开发库,允许建表、删表、清空数据,但禁止访问生产库及系统库(mysql、information_schema 等)

常用权限分配示例

以一个电商系统为例,假设业务库名为ecommerce_db

  • 应用连接账号:GRANT SELECT, INSERT, UPDATE, DELETE ON ecommerce_db.* TO 'app_user'@'192.168.10.%' IDENTIFIED BY 'pwd123';
  • 报表查询账号:GRANT SELECT ON ecommerce_db.orders TO 'report_user'@'10.0.5.%';(只查 orders 表)
  • DBA 维护账号:GRANT RELOAD, PROCESS, SHOW DATABASES, LOCK TABLES ON *.* TO 'dba_admin'@'10.0.1.%';(不碰业务数据)
  • 禁止远程 root 登录:UPDATE mysql.user SET host='localhost' WHERE user='root' AND host!='localhost'; FLUSH PRIVILEGES;

权限回收与定期审计要点

权限不是设一次就完事,需持续管理:

  • 离职或转岗人员账号立即禁用:REVOKE ALL PRIVILEGES ON *.* FROM 'old_user'@'%'; DROP USER 'old_user'@'%';
  • 每季度检查高危权限持有者:SELECT user,host,Select_priv,Insert_priv,Drop_priv,Create_priv,Grant_priv FROM mysql.user WHERE Drop_priv='Y' OR Grant_priv='Y';
  • 避免通配符滥用:不用'%'@'%',优先绑定内网 IP 段或跳板机地址
  • 密码策略同步启用:ALTER USER 'app_user'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;

权限生效与验证方式

赋权后必须验证是否生效,且确认实际行为符合预期:

  • 执行 FLUSH PRIVILEGES; 确保内存权限表刷新(部分版本自动刷新,但显式执行更稳妥)
  • 用对应账号登录后,运行 SHOW GRANTS; 查看当前权限清单
  • 模拟业务操作验证:比如用app_user 尝试DROP TABLE products;,应明确报错 Access denied
  • 检查错误日志:tail -f /var/log/mysql/error.log,留意拒绝类记录(Access denied for user)
text=ZqhQzanResources