一、引言
MySQL 作为广泛使用的开源数据库,其安全性至关重要。本文以 MySQL 8.0版本 + Linux 系统为例,介绍一系列安全配置项及检测与修复方法,帮助用户抵御常见黑客攻击,提升数据库安全性。
二、安全配置项
(一)操作系统级别安全配置
- 确保数据文件在非系统分区- 建议理由:防止系统分区磁盘空间用尽导致服务拒绝。- 检查手段:使用
show variables
定位数据文件地址,再用df -h
检查。- 修复建议:迁移数据文件,修改配置文件中datadir
的值。 - 确保 mysql 操作系统账号权限最小化- 建议理由:减小 mysql 漏洞对操作系统的影响。- 检查手段:查看
mysql
账号相关进程。- 修复建议:创建仅用于运行 mysql 及相关进程的用户。 - 禁止 mysql 链接历史记录- 建议理由:避免暴露登陆敏感信息。- 检查手段:检查
.mysql_history
文件是否存在。- 修复建议:删除并禁止记录,可通过链接到/dev/null
或修改环境变量实现。 - 禁止 MYSQL_PWD 的使用- 建议理由:MYSQL_PWD 以明文存储密码,存在安全隐患。- 检查手段:检查是否存在使用该环境变量的进程。- 修复建议:相关脚本和进程不再使用该环境变量。
- 禁止 MYSQL 操作系统账号登陆- 建议理由:防止黑客利用漏洞反射 shell。- 检查手段:检查账号登陆限制。- 修复建议:执行命令禁止
mysql
登陆。 - 禁止 MYSQL 使用默认端口- 建议理由:使用默认端口易被发现,更改端口有助于隐藏数据库。- 检查手段:执行
show global variables
查看端口。- 修复建议:修改配置文件更改端口。
(二)文件系统权限安全配置
- 确保数据文件最小权限- 建议理由:防止数据被非法读取或修改。- 检查手段:执行 SQL 定位数据文件地址,检查权限。- 修复建议:设置合适权限和所有者。
- 确保各类日志文件最小权限(log_bin_basename、log_error、slow_query_log、relay_log_basename、general_log_file)- 建议理由:保护数据信息不泄露或被恶意修改。- 检查手段:执行 SQL 定位日志文件地址,检查权限。- 修复建议:设置为 660 权限并属主为
mysql:mysql
。 - 确保密钥文件最小权限- 建议理由:防止密钥文件被盗取、替换或破解。- 检查手段:执行 SQL 定位密钥文件地址,检查权限。- 修复建议:设置为 400 权限并属主为
mysql:mysql
。 - 确保插件目录最小权限- 建议理由:防止恶意添加插件控制 mysql。- 检查手段:执行 SQL 定位插件目录地址,检查权限。- 修复建议:设置为 755 权限并属主为
mysql:mysql
。
(三)MySQL 基本安全配置
- 确保使用最新版 mysql 数据库- 建议理由:新版修复 bug 和漏洞,提高安全性。- 检查手段:执行
SHOW VARIABLES
查看版本。- 修复建议:升级到新版本。 - 确保样例数据库删除- 建议理由:减少黑客攻击面。- 检查手段:执行 SQL 检查是否存在样例库。- 修复建议:删除样例库。
- 修改 root 用户名- 建议理由:减小攻击面,防止密码猜测攻击。- 检查手段:执行 SQL 检查是否有默认
root
用户。- 修复建议:修改用户名并刷新权限。 - 确保相关参数设置正确- allow-suspicious-udfs:设置为
false
,防止加载威胁 UDFs 函数。- 禁用 local_infile:阻止黑客利用 sql 注入读取数据库文件。- 确保 skip-grant-tables 设置成 false:避免所有账号无限制访问数据库。- 确保 skip-symbolic-links 开启:禁止用户删除或重命名特定文件。- 确保插件 daemon_memcached 被禁用:防止数据泄漏隐患。- 确保 secure_file_priv 不是空:限制客户端读取数据文件路径。- 确保 sql_mode 是 STRICT_ALL_TABLES 模式:检查更新数据,阻碍入侵检测规避。- 确保 disconnect_on_expired_password 参数是 ON:控制客户端用失效密码访问数据库。
(四)MySQL 权限安全配置
- 确保只有管理员账号有所有数据库的访问权限- 建议理由:防止非管理员过高权限导致安全问题。- 检查手段:执行 SQL 检查相关权限用户。- 修复建议:清除非管理员过高权限。
- 非管理员账号特定权限限制- File_priv:不应设置为
Y
,防止数据盗取。- Process_priv:不应设置为Y
,防止查看执行语句被利用。- Super_priv:不应设置为Y
,非管理员不应执行任意语句。- Shutdown_priv:不应设置为Y
,防止关闭数据库造成安全隐患。- Create_user_priv:不应设置为Y
,防止创建任意用户带来风险。- Grant_priv:不应设置为Y
,避免权限被黑客利用赋权。- Reload_priv:不应设置为Y
,防止对本地文件操作被利用。- Repl_slave_priv:不应设置为Y
,防止敏感数据被盗取。- DML/DDL 权限:确保只在特定用户手上,防止数据泄密。
(五)审计和日志安全配置
- 确保 log_error 日志启动- 建议理由:增加检测恶意攻击机会,提供安全检查线索和证据。- 检查手段:执行 SQL 检查。- 修复建议:配置有效路径。
- 确保日志文件在非系统分区- 建议理由:防止系统分区磁盘空间用尽影响日志。- 检查手段:执行 SQL 定位日志文件地址,用
df -h
检查。- 修复建议:修改配置文件设置非系统分区路径。 - 确保 log_raw 被设置成 off- 建议理由:防止密码明文记录。- 检查手段:检查数据库配置文件。- 修复建议:设置为
OFF
。 - 确保 log_warnings 被设置成 2- 建议理由:有助于追查安全问题。- 检查手段:执行 SQL 查看。- 修复建议:设置为 2。
- 企业版独有审计参数设置(audit_log_connection_policy、audit_log_exclude_accounts、audit_log_include_accounts、audit_log_policy、audit_log_statement_policy、audit_log_strategy)- 建议理由:不同参数设置用于追踪安全问题,防止用户行为逃避审计等。- 检查手段:执行 SQL 查看相关参数值。- 修复建议:根据建议值进行设置,如
SET GLOBAL
相关参数。
(六)身份认证安全配置
- 确保密码不在全局变量中- 建议理由:防止密码参数影响用户机密性。- 检查手段:检查数据库配置文件。- 修复建议:清理参数内容。
- 确保 sql_mode 中含有 NO_AUTO_CREATE_USER- 建议理由:阻止 grant 语句自动创建用户带来安全隐患。- 检查手段:执行 SQL 查看。- 修复建议:添加参数到
sql_mode
。 - 确保没有用户使用空密码- 建议理由:空密码易被入侵。- 检查手段:执行 SQL 查看。- 修复建议:为空白密码账号设置密码。
- 确保 default_password_lifetimes 少于或等于 90 天- 建议理由:定期更换密码防止破解。- 检查手段:执行 SQL 查看。- 修复建议:设置全局变量。
- 确保用户不允许所有 ip 访问- 建议理由:防止账号密码泄露后数据库不安全。- 检查手段:执行 SQL 查看。- 修复建议:删除用户或指定特定 ip。
- 确保无匿名帐户存在- 建议理由:匿名用户安全性差。- 检查手段:执行 SQL 查看。- 修复建议:删除匿名用户。
(七)网络安全配置
- 确保 have_ssl 设置成 yes- 建议理由:保证网络请求通过 SSL/TLS 访问,防止劫持和拦截。- 检查手段:执行 SQL 查看。- 修复建议:开启 ssh。
- 确保 ssl_type 是 ‘ANY’, ‘X509’, or ‘SPECIFIED’- 建议理由:使用高安全类型加密算法,防止网络问题。- 检查手段:执行 SQL 查看非本地用户的
ssl_type
。- 修复建议:使用GRANT
语句设置要求的 SSL。
(八)复制数据传输中的安全配置
- 确保 MASTER_SSL_VERIFY_SERVER_CERT 设置成 yes 或 1- 建议理由:验证主服务器证书合法性。- 检查手段:执行 SQL 查看。- 修复建议:修改配置并重启相关服务。
- 确保 master_info_repository 设置成 table- 建议理由:密码存储在表中更安全。- 检查手段:执行 SQL 查看。- 修复建议:修改配置文件设置为
TABLE
。
欢迎关注公众号《小周的数据库进阶之路》,更多精彩知识和干货尽在其中。
本文转载自: https://blog.csdn.net/qq_36936192/article/details/143228198
版权归原作者 我科绝伦(Huanhuan Zhou) 所有, 如有侵权,请联系我们删除。
版权归原作者 我科绝伦(Huanhuan Zhou) 所有, 如有侵权,请联系我们删除。