MySQL数据库安全加固方法
基本安全原则
-
选择稳定、无漏洞版本并及时升级更新、打补丁
-
配置防火墙策略,更改默认端口
-
避免使用弱口令,定期更新口令
-
严格的权限分配和访问控制
具体安全配置
系统层面配置
-
系统安装时,需要确认没有其他⽤户登录在服务器上。建议在服务器本地安装,不使⽤⽹络远程安装。
-
数据库版本选择稳定、无漏洞的版本,并及时更新、打补丁
-
查看系统防火墙或网络安全设备,是否有限制对MySQL数据库的访问
-
不设置环境变量或确保MYSQL_PWD环境变量未设置敏感信息
-
禁止使用命令行历史记录
Linux系统: 执行如下命令: find / -name ".mysql_history" 查看是否存在mysql的历史命令记录文件,如果存在,则需要进行如下加固: (1)删除.mysql_history文件; (2)设置环境变量MYSQL_HISTFILE为/dev/null,并添加到shell的初始化脚本中,创建mysql_history到/dev/null的链接: ln -s /dev/null $HOME/.mysql_history
服务器配置
严禁将数据库服务器允许从公⽹直接访问,也严禁将数据库服务器配置公⽹IP或通过⽹络设备映射出公⽹IP。 在局域⽹内限制开放的端口。需要其他额外的端口,需要提出申请,并有⽂档记录。 服务器不应该具备访问外⽹的能⼒(如有必要,可单向访问)。 新的服务器正式投⼊使⽤前,必须经过安全加固。
数据库通信安全
-
通信加密
show variables like ‘have_openssl’; have_openssl=YES
-
服务端证书验证
查看my.cnf文件[Client] 字段,已配置ssl_verify_server_cert参数
-
SSL连接配置
1.show variables like ‘ssl_cert’; 2.show variables like ‘ssl_key’; 3.show variables like ‘ssl_ca’;
⽤户和密码配置
-
严格限制Mysql帐户,使用专用的最小权限账号运行Mysql数据库进程
-
重命名root账号
-
禁止数据库账号共用
-
控制最高权限只有管理员
使用如下sql语句: SELECT user, host FROM mysql.user WHERE (Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') OR (Create_priv = 'Y') OR (Drop_priv = 'Y'); SELECT