MySQL数据库的安全配置是防护数据库攻击的基础工作,合理的配置可以从根源上减少被入侵的可能性,避免核心业务数据遭受损失。下面将从多个层面介绍具体的安全配置方法。

账户与权限安全配置
删除默认高危账户
MySQL安装完成后默认会存在空密码的root账户和匿名账户,这些是攻击者首先尝试利用的目标,需要第一时间清理。
可以先查看当前所有账户:
-- 查看所有MySQL用户 SELECT user, host FROM mysql.user;
删除匿名账户和不需要的测试账户:
-- 删除匿名用户 DROP USER ''@'localhost'; -- 删除测试库(如果存在) DROP DATABASE IF EXISTS test;
最小权限原则配置
不要给业务账户分配过高的权限,遵循最小权限原则,仅授予业务所需的最低权限。比如普通业务查询账户只需要SELECT权限,不要授予ALL PRIVILEGES。
创建业务专用账户并限制权限的示例:
-- 创建业务用户,仅允许指定IP访问 CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'Strong_Password_123'; -- 仅授予该用户指定库的查询、插入、更新权限 GRANT SELECT, INSERT, UPDATE ON app_db.* TO 'app_user'@'192.168.1.%'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
网络访问安全配置
限制监听地址
默认情况下MySQL可能监听所有网卡地址,容易被外部网络直接访问。可以修改配置文件my.cnf(Linux)或my.ini(Windows),设置bind-address参数,仅监听内网地址或指定IP。
配置示例:
[mysqld] # 仅监听本地回环地址,仅允许本机访问 bind-address = 127.0.0.1 # 如果需要允许内网其他机器访问,可以设置为内网IP # bind-address = 192.168.0.1
修改默认端口
MySQL默认端口是3306,攻击者会优先扫描该端口,建议修改为非默认端口,减少被批量扫描的概率。同样在配置文件的mysqld段添加端口配置:
[mysqld] port = 3307
SQL注入防护配置
开启严格SQL模式
开启严格SQL模式可以避免一些不规范的SQL语句执行,减少SQL注入的利用空间。在配置文件中添加sql_mode参数:
[mysqld] sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ZERO_DATE,NO_ZERO_IN_DATE
禁用危险函数
部分MySQL函数容易被用于注入攻击,比如into outfile、load_file等,可以通过配置禁用这些函数。在配置文件中添加:
[mysqld] # 禁用本地文件加载功能 local-infile = 0
其他安全加固配置
开启日志审计
开启MySQL的日志功能,便于后续出现攻击时溯源分析。建议开启错误日志、慢查询日志和二进制日志:
[mysqld] # 错误日志路径 log-error = /var/log/mysql/error.log # 慢查询日志 slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 # 二进制日志 log-bin = /var/log/mysql/mysql-bin
定期更新版本
MySQL官方会定期修复已知的安全漏洞,需要定期关注官方安全公告,及时更新到稳定的安全版本,避免利用已知漏洞发起攻击。
密码策略配置
设置强密码策略,要求用户密码满足复杂度要求,避免弱密码被暴力破解。在配置文件中添加密码策略参数:
[mysqld] # 密码长度至少8位 validate_password.length = 8 # 至少包含1个大写字母、1个小写字母、1个数字、1个特殊字符 validate_password.policy = STRONG
完成所有配置修改后,需要重启MySQL服务使配置生效,之后可以定期巡检配置是否符合安全要求,及时调整不合理的配置项。