SQL生产账号须遵循最小权限原则,按角色划分(查询、写入、运维、归档),精确授权到库表,禁用通配符与SUPER/FILE等高危权限,绑定可信IP并限制连接数,定期清理闲置账号。
SQL生产账号必须遵循最小权限原则,只授予完成业务必需的权限,避免使用root或sa等高权限账号直接对接应用。
按角色划分账号,明确用途边界不要用一个账号跑所有业务。建议拆分为:查询账号、写入账号、运维账号、归档账号等。例如,报表系统只配只读权限(SELECT),且限制在指定库和几张核心表;订单服务账号仅允许对order、payment表执行INSERT/UPDATE,禁止DROP或ALTER操作。
建账号时用CREATE USER 'app_report'@'10.20.%' IDENTIFIED BY 'xxx';
授权时精确到库+表:
GRANT SELECT ON finance.sales_summary TO 'app_report'@'10.20.%';
禁止通配符滥用:
不执行 GRANT SELECT ON *.*禁用高危权限,关闭非必要功能生产环境必须显式回收SUPER、FILE、SHUTDOWN、PROCESS、REPLICATION CLIENT等权限。尤其注意:FILE权限可读写服务器文件系统,曾被用于读取/etc/passwd或写入Webshell。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
检查当前权限:
SHOW GRANTS FOR 'app_user'@'%';
回收危险权限:
REVOKE FILE, SUPER ON *.* FROM 'app_user'@'%';MySQL 8.0+ 可用角色管理:CREATE ROLE 'readonly_role'; GRANT SELECT ON sales.* TO 'readonly_role';限制登录来源与连接数,增加基础防护账号绑定可信IP段(如应用服务器内网段),并设置最大并发连接数,防暴力试探或连接耗尽攻击。
创建时指定host:
CREATE USER 'svc_order'@'172.16.5.0/24' IDENTIFIED BY 'pwd';
限制连接数:
ALTER USER 'svc_order'@'172.16.5.0/24' WITH MAX_USER_CONNECTIONS 20;
定期清理长期未用账号:
SELECT user, host, password_last_changed FROMmysql.user WHERE password_last_changed定期审计与自动轮换,形成闭环权限不是一劳永逸。建议每月导出账号权限快照,对比变更;密码每90天强制轮换,并通过配置中心或密钥管理服务(如Vault)分发,不硬编码在配置文件中。
生成权限报告:
SELECT user, host, db, table_name, privilege_type FROM information_schema.role_table_grants WHERE role_name = 'app_role';
轮换密码后立即刷新权限:
ALTER USER 'app_user'@'%' IDENTIFIED BY 'new_strong_pwd'; FLUSH PRIVILEGES;应用启动时校验连接可用性,失败即告警,不静默降级
