分权管理要求将dba权限按职责拆分为系统管理员、安全管理员和审计管理员三类角色,各自拥有独立账号、密码与会话,通过mysql 8.0+角色机制固化权限边界,并强化登录限制、操作审批与日志审计。

数据库管理员账号不能“一权到底”,分权管理的核心是把原本集中于一个账号的权限,按职责切分成互不重叠、互相制衡的几类,让不同角色各司其职、彼此监督。
明确三类核心角色及其边界
不是给DBA加更多权限,而是把DBA这个身份拆开:系统管理员管服务器和实例运行,安全管理员管账号与策略,审计管理员只看日志不碰操作。每个角色登录的是独立账号,密码分离、会话隔离。
- 系统管理员(如sysop_db):可启停MySQL服务、调优参数、管理磁盘与备份,但无权创建用户、无权访问业务表数据
- 安全管理员(如sec_admin):可执行CREATE USER、GRANT/REVOKE、配置密码策略、启用审计插件,但不能执行SELECT/INSERT/ALTER任何业务表
- 审计管理员(如auditor_db):仅拥有SELECT权限访问mysql.general_log、performance_schema.audit_log_summary等审计视图,禁止连接业务库、禁止执行任何DML或DDL
用MySQL 8.0+角色机制固化分工
避免手动反复赋权出错,把每类职责打包成角色,再绑定到对应账号。角色本身不登录,只作为权限容器。
- 创建角色:CREATE ROLE 'db_sysop', 'db_sec', 'db_auditor';
- 授予权限(示例):
GRANT SERVICE_SUPER, REPLICATION CLIENT ON *.* TO 'db_sysop';
GRANT CREATE USER, GRANT OPTION, AUDIT_ADMIN ON *.* TO 'db_sec';
GRANT SELECT ON performance_schema.* TO 'db_auditor'; - 绑定用户:GRANT 'db_sysop' TO 'sysop_db'@'10.20.30.%';
并设为默认:SET DEFAULT ROLE 'db_sysop' TO 'sysop_db'@'10.20.30.%';
限制登录来源与行为能力
即使角色分清了,账号本身也要加固,防止越权跳转或横向移动。
- 所有管理账号强制限定host,例如'sysop_db'@'10.20.30.5'(跳板机IP),禁用'%'通配符
- 禁用交互式命令执行:在MySQL配置中启用sql_mode = 'NO_USER_CHANGE',防止普通用户通过SQL切换用户上下文
- 关键账号设置密码有效期与失败锁定:ALTER USER 'sec_admin'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'sec_admin'@'localhost' FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1;
日常运维必须走审批与留痕
分权不是终点,而是让每一次高危操作都可追溯、需协同。
- 涉及GRANT、DROP USER、ALTER TABLE等操作,必须通过工单系统提交,由安全管理员审批后,由系统管理员执行
- 所有管理账号启用通用查询日志(general_log)或企业版审计插件,并将日志实时同步至独立日志服务器
- 每月自动扫描:SELECT user, host, account_locked FROM mysql.user WHERE authentication_string = '' OR password_expired = 'Y';,清理过期或空口令账号











