第九篇:MySQL 安全加固与访问控制策略实战
数据库的安全不仅仅是防止外部入侵,更包括合理配置账户权限、日志审计、网络加密、配置加固等。本文将系统性梳理 MySQL 的安全机制与实战加固方法,助你构建安全可靠的数据库运行环境。
一、数据库安全风险面
数据库常面临的威胁:
-
弱口令或默认账户;
-
SQL 注入攻击;
-
非授权访问;
-
数据传输被监听(中间人攻击);
-
内部人员越权操作;
-
日志信息泄露。
二、用户权限管理与最小授权原则
1. 查看当前用户权限
SHOW GRANTS FOR 'user'@'host';
2. 创建账户并授权
-- 创建用户
CREATE USER 'dev'@'192.168.1.%' IDENTIFIED BY 'StrongP@ss123';-- 授权指定数据库操作权限
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'dev'@'192.168.1.%';-- 撤销权限
REVOKE UPDATE ON mydb.* FROM 'dev'@'192.168.1.%';
3. 删除用户
DROP USER 'dev'@'192.168.1.%';
建议:
-
禁用或删除匿名账户和
test
库; -
给用户只授权必要的权限,禁止使用
GRANT
,FILE
,SUPER
等高危权限; -
使用
REVOKE
定期收回不必要权限。
三、数据库访问加密与 SSL 配置
1. 启用 SSL 传输加密
修改配置文件 my.cnf
:
[mysqld] ssl-ca=/etc/mysql/ssl/ca.pem ssl-cert=/etc/mysql/ssl/server-cert.pem ssl-key=/etc/mysql/ssl/server-key.pem
重启 MySQL 并验证:
SHOW VARIABLES LIKE '%ssl%';
2. 强制客户端使用 SSL 连接
GRANT ALL PRIVILEGES ON mydb.* TO 'user'@'%' REQUIRE SSL;
四、配置文件加固建议
编辑 /etc/my.cnf
添加或确认以下设置:
skip-name-resolve # 禁用 DNS 解析,加速连接 skip-symbolic-links # 防止符号链接绕过权限 local-infile=0 # 禁止 LOAD DATA LOCAL INFILE,防止 SQL 注入 secure-file-priv="/tmp" # 限制导入导出路径
五、SQL 注入防御与审计机制
1. SQL 注入防御建议
-
应用层使用参数化查询(如
prepare
、ORM 绑定); -
数据库层禁止
local_infile
; -
限权用户不具备
FILE
、SUPER
等权限。
2. 启用审计日志(推荐使用插件)
使用 MySQL Enterprise Audit 或开源审计插件:
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
记录登录、DDL/DML 等行为,提升可追溯性。
六、防止暴力破解与网络入侵
1. 配置防火墙(iptables/UFW)
-
仅允许可信 IP 登录 MySQL 端口(3306);
-
拒绝外部未授权访问。
# 示例:只允许 192.168.1.0/24 网段访问 MySQL iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP
2. 限制连接来源(bind-address)
bind-address = 127.0.0.1 # 仅允许本地连接
或绑定指定内网 IP。
七、数据库日志与定期审计
建议开启以下日志并定期审查:
日志类型 | 描述 |
---|---|
error.log | 启动、运行、崩溃信息 |
slow.log | 慢查询日志,便于优化 SQL |
general.log | 所有查询(不推荐长期启用) |
audit.log | 审计插件生成的操作记录日志 |
可配合 logrotate 定期归档和压缩。
八、安全加固自动化脚本(简要)
#!/bin/bash mysql -u root -p$1 <<EOF -- 删除匿名用户 DELETE FROM mysql.user WHERE User=''; -- 禁止 root 远程登录 UPDATE mysql.user SET Host='localhost' WHERE User='root'; -- 删除 test 数据库 DROP DATABASE IF EXISTS test; -- 刷新权限 FLUSH PRIVILEGES; EOF
九、最佳实践总结
安全维度 | 加固建议 |
---|---|
账户与权限 | 分权分域、禁用空口令、启用强认证 |
数据传输 | 启用 SSL、限制客户端连接 |
网络与端口 | 关闭公网访问、使用防火墙、绑定内网地址 |
操作审计 | 开启审计日志、记录用户操作 |
系统与文件权限 | 严控配置文件访问权限(如 chmod 600 my.cnf ) |
自动化与策略 | 脚本自动化+定期扫描弱点(如使用 Lynis、MySQLTuner) |
总结
-
安全策略应覆盖用户、网络、系统和应用多维度;
-
合理配置 MySQL 权限和加密机制是第一道防线;
-
日志审计与访问控制是提升可控性的关键;
-
安全是一个持续过程,需结合业务定期检查与加固。