0


MySQL 最佳安全配置实践

一、引言

MySQL 作为广泛使用的开源数据库,其安全性至关重要。本文以 MySQL 8.0版本 + Linux 系统为例,介绍一系列安全配置项及检测与修复方法,帮助用户抵御常见黑客攻击,提升数据库安全性。

二、安全配置项

(一)操作系统级别安全配置

  1. 确保数据文件在非系统分区- 建议理由:防止系统分区磁盘空间用尽导致服务拒绝。- 检查手段:使用 show variables 定位数据文件地址,再用 df -h 检查。- 修复建议:迁移数据文件,修改配置文件中 datadir 的值。
  2. 确保 mysql 操作系统账号权限最小化- 建议理由:减小 mysql 漏洞对操作系统的影响。- 检查手段:查看 mysql 账号相关进程。- 修复建议:创建仅用于运行 mysql 及相关进程的用户。
  3. 禁止 mysql 链接历史记录- 建议理由:避免暴露登陆敏感信息。- 检查手段:检查 .mysql_history 文件是否存在。- 修复建议:删除并禁止记录,可通过链接到 /dev/null 或修改环境变量实现。
  4. 禁止 MYSQL_PWD 的使用- 建议理由:MYSQL_PWD 以明文存储密码,存在安全隐患。- 检查手段:检查是否存在使用该环境变量的进程。- 修复建议:相关脚本和进程不再使用该环境变量。
  5. 禁止 MYSQL 操作系统账号登陆- 建议理由:防止黑客利用漏洞反射 shell。- 检查手段:检查账号登陆限制。- 修复建议:执行命令禁止 mysql 登陆。
  6. 禁止 MYSQL 使用默认端口- 建议理由:使用默认端口易被发现,更改端口有助于隐藏数据库。- 检查手段:执行 show global variables 查看端口。- 修复建议:修改配置文件更改端口。

(二)文件系统权限安全配置

  1. 确保数据文件最小权限- 建议理由:防止数据被非法读取或修改。- 检查手段:执行 SQL 定位数据文件地址,检查权限。- 修复建议:设置合适权限和所有者。
  2. 确保各类日志文件最小权限(log_bin_basename、log_error、slow_query_log、relay_log_basename、general_log_file)- 建议理由:保护数据信息不泄露或被恶意修改。- 检查手段:执行 SQL 定位日志文件地址,检查权限。- 修复建议:设置为 660 权限并属主为 mysql:mysql
  3. 确保密钥文件最小权限- 建议理由:防止密钥文件被盗取、替换或破解。- 检查手段:执行 SQL 定位密钥文件地址,检查权限。- 修复建议:设置为 400 权限并属主为 mysql:mysql
  4. 确保插件目录最小权限- 建议理由:防止恶意添加插件控制 mysql。- 检查手段:执行 SQL 定位插件目录地址,检查权限。- 修复建议:设置为 755 权限并属主为 mysql:mysql

(三)MySQL 基本安全配置

  1. 确保使用最新版 mysql 数据库- 建议理由:新版修复 bug 和漏洞,提高安全性。- 检查手段:执行 SHOW VARIABLES 查看版本。- 修复建议:升级到新版本。
  2. 确保样例数据库删除- 建议理由:减少黑客攻击面。- 检查手段:执行 SQL 检查是否存在样例库。- 修复建议:删除样例库。
  3. 修改 root 用户名- 建议理由:减小攻击面,防止密码猜测攻击。- 检查手段:执行 SQL 检查是否有默认 root 用户。- 修复建议:修改用户名并刷新权限。
  4. 确保相关参数设置正确- 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 权限安全配置

  1. 确保只有管理员账号有所有数据库的访问权限- 建议理由:防止非管理员过高权限导致安全问题。- 检查手段:执行 SQL 检查相关权限用户。- 修复建议:清除非管理员过高权限。
  2. 非管理员账号特定权限限制- 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 权限:确保只在特定用户手上,防止数据泄密。

(五)审计和日志安全配置

  1. 确保 log_error 日志启动- 建议理由:增加检测恶意攻击机会,提供安全检查线索和证据。- 检查手段:执行 SQL 检查。- 修复建议:配置有效路径。
  2. 确保日志文件在非系统分区- 建议理由:防止系统分区磁盘空间用尽影响日志。- 检查手段:执行 SQL 定位日志文件地址,用 df -h 检查。- 修复建议:修改配置文件设置非系统分区路径。
  3. 确保 log_raw 被设置成 off- 建议理由:防止密码明文记录。- 检查手段:检查数据库配置文件。- 修复建议:设置为 OFF
  4. 确保 log_warnings 被设置成 2- 建议理由:有助于追查安全问题。- 检查手段:执行 SQL 查看。- 修复建议:设置为 2。
  5. 企业版独有审计参数设置(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 相关参数。

(六)身份认证安全配置

  1. 确保密码不在全局变量中- 建议理由:防止密码参数影响用户机密性。- 检查手段:检查数据库配置文件。- 修复建议:清理参数内容。
  2. 确保 sql_mode 中含有 NO_AUTO_CREATE_USER- 建议理由:阻止 grant 语句自动创建用户带来安全隐患。- 检查手段:执行 SQL 查看。- 修复建议:添加参数到 sql_mode
  3. 确保没有用户使用空密码- 建议理由:空密码易被入侵。- 检查手段:执行 SQL 查看。- 修复建议:为空白密码账号设置密码。
  4. 确保 default_password_lifetimes 少于或等于 90 天- 建议理由:定期更换密码防止破解。- 检查手段:执行 SQL 查看。- 修复建议:设置全局变量。
  5. 确保用户不允许所有 ip 访问- 建议理由:防止账号密码泄露后数据库不安全。- 检查手段:执行 SQL 查看。- 修复建议:删除用户或指定特定 ip。
  6. 确保无匿名帐户存在- 建议理由:匿名用户安全性差。- 检查手段:执行 SQL 查看。- 修复建议:删除匿名用户。

(七)网络安全配置

  1. 确保 have_ssl 设置成 yes- 建议理由:保证网络请求通过 SSL/TLS 访问,防止劫持和拦截。- 检查手段:执行 SQL 查看。- 修复建议:开启 ssh。
  2. 确保 ssl_type 是 ‘ANY’, ‘X509’, or ‘SPECIFIED’- 建议理由:使用高安全类型加密算法,防止网络问题。- 检查手段:执行 SQL 查看非本地用户的 ssl_type。- 修复建议:使用 GRANT 语句设置要求的 SSL。

(八)复制数据传输中的安全配置

  1. 确保 MASTER_SSL_VERIFY_SERVER_CERT 设置成 yes 或 1- 建议理由:验证主服务器证书合法性。- 检查手段:执行 SQL 查看。- 修复建议:修改配置并重启相关服务。
  2. 确保 master_info_repository 设置成 table- 建议理由:密码存储在表中更安全。- 检查手段:执行 SQL 查看。- 修复建议:修改配置文件设置为 TABLE

欢迎关注公众号《小周的数据库进阶之路》,更多精彩知识和干货尽在其中。

标签: mysql 安全

本文转载自: https://blog.csdn.net/qq_36936192/article/details/143228198
版权归原作者 我科绝伦(Huanhuan Zhou) 所有, 如有侵权,请联系我们删除。

“MySQL 最佳安全配置实践”的评论:

还没有评论