如何定期审查权限_mysql权限维护流程

来源:这里教程网 时间:2026-02-28 20:34:33 作者:

定期审查 MySQL 权限不是一次性的操作,而是需要制度化、自动化的维护流程。核心在于“查得全、看得清、改得准、留得下”——即全面发现权限配置、清晰识别风险项、精准调整冗余或越权设置,并保留可追溯的审计记录。

明确审查范围和关键风险点

权限审查不能只看

mysql.user
表,要覆盖多层级权限结构:

全局权限:重点关注
SUPER
GRANT OPTION
FILE
SHUTDOWN
等高危权限,这些可能被用于提权或数据导出
数据库级权限:检查
mysql.db
中对敏感库(如
information_schema
sys
、业务核心库)的非必要授权
表/列级权限:确认
mysql.tables_priv
mysql.columns_priv
是否存在过度细化但实际已废弃的授权
账户状态:同步检查
Account_locked
password_expired
max_connections
等安全属性是否合规

用标准 SQL 快速生成审查清单

每次人工登录后,可直接运行以下组合查询,5 秒内输出关键信息:

所有活跃用户及其高危权限:
SELECT User, Host, Account_locked, password_expired, Super_priv, Grant_priv, File_priv FROM mysql.user WHERE account_locked = 'N';
每个用户的完整权限语句(便于比对):
SELECT CONCAT('SHOW GRANTS FOR ''', User, '''@''', Host, ''';') AS cmd FROM mysql.user WHERE User != '' ORDER BY User;

将结果复制执行,或用脚本批量收集
无主数据库权限(曾授权但用户已删):
SELECT DISTINCT User, Host FROM mysql.db WHERE User NOT IN (SELECT User FROM mysql.user);

自动化脚本 + 定时任务闭环执行

把审查动作固化为可重复、可归档的运维动作:

编写 shell 脚本(如
audit_mysql_privs.sh
),连接数据库并导出四类权限表快照 +
SHOW GRANTS
结果到带日期的文件夹中
加入基础校验逻辑:例如自动标出
Super_priv = 'Y'
Host = '%'
的账户,提示“需人工复核”
crontab
设置每周日凌晨 2 点执行:
0 2 * * 0 /opt/dba/audit_mysql_privs.sh >> /var/log/mysql/audit.log 2>&1
建议保留最近 12 周的审计日志,方便做权限变更趋势分析

审查后必须做的三件事

发现不合规项只是开始,闭环处理才真正提升安全性:

清理失效账户:对 90 天未登录、测试期已过的账户,执行
DROP USER 'xxx'@'host';
收紧越权配置:将
GRANT ALL ON *.*
改为按需授予,例如仅
SELECT, INSERT ON finance.invoice
记录变更依据:每次调整权限,都在内部运维系统中登记操作人、时间、原因(如“配合 XX 系统上线新增读写权限”),不可仅靠口头确认

相关推荐