数据库安全加固方案

约 7 分钟读完

数据库安全加固方案

概述

数据库是企业核心数据资产的存储中心,也是攻击者的重点目标。近年来,由于数据库配置不当导致的数据泄露事件屡见不鲜——暴露在公网的 Redis 未授权访问、MongoDB 默认无认证配置、MySQL 弱口令等问题频繁出现在安全事件报告中。数据库安全加固是系统加固中不可忽视的关键环节。

主流数据库系统(MySQL、Redis、MongoDB)的默认配置通常偏向易用性,安全功能需要手动启用和配置。数据库安全加固的核心思路是:认证加固(强密码+访问限制)、权限最小化(仅授予必需的操作权限)、网络隔离(限制监听地址和访问来源)、审计追踪(记录关键操作日志)。

本文将针对 MySQL、Redis 和 MongoDB 三种常用数据库分别介绍安全加固的具体措施和最佳实践。

核心概念

MySQL安全加固

认证安全:为 root 账户设置强密码(至少 16 位,包含大小写字母、数字和特殊字符),删除匿名用户(DELETE FROM mysql.user WHERE User='';),删除测试数据库(DROP DATABASE test;),限制 root 用户仅能从 localhost 登录。

权限最小化:遵循最小权限原则为应用创建专用数据库用户,仅授予必要的权限。例如:CREATE USER 'app_user'@'10.0.0.%' IDENTIFIED BY 'strong_password'; GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'10.0.0.%';。禁止应用用户使用 FILE、PROCESS、SUPER 等高危权限。

网络安全:绑定监听地址为内网 IP(bind-address = 10.0.0.1),修改默认端口(port = 3307),使用防火墙限制访问来源。启用 SSL/TLS 加密连接(require_secure_transport = ON),防止数据在网络传输中被窃听。

审计与日志:启用通用查询日志(general_log = ON,生产环境慎用)、慢查询日志(slow_query_log = ON)和错误日志。MySQL Enterprise 版提供审计插件(Audit Plugin),社区版可使用 MariaDB Audit Plugin 或 Percona Audit Log 插件。

Redis安全加固

认证配置:设置访问密码(requirepass <strong_password>,Redis 6.0+ 推荐使用 ACL 替代)。Redis 6.0 引入了 ACL(Access Control List)系统,可以为不同用户设置不同的权限和密码,实现更细粒度的访问控制。

网络隔离:绑定监听地址为内网 IP(bind 127.0.0.1 10.0.0.1),启用保护模式(protected-mode yes),修改默认端口(port 6380)。Redis 默认监听所有接口且无认证,这是最常见的安全问题。

危险命令禁用:通过 rename-command 禁用或重命名高危命令:rename-command FLUSHALL ""(禁用)、rename-command CONFIG "CONFIG_b93c4e8f"(重命名)、rename-command DEBUG ""。建议禁用或重命名的命令包括:FLUSHALL、FLUSHDB、CONFIG、DEBUG、KEYS、SHUTDOWN。

文件安全:确保 Redis 以低权限用户运行,设置 dirdbfilename 为专用目录,防止通过 Redis 写入 crontab 或 SSH 公钥文件(这是 Redis 未授权访问最常见的攻击手法)。

MongoDB安全加固

认证启用:MongoDB 3.6+ 默认启用访问控制,但旧版本或手动安装可能未启用。确保 security.authorization 设置为 enabled,创建管理员用户和应用专用用户。

用户管理:使用 createUser 命令创建用户并分配角色。MongoDB 使用基于角色的访问控制(RBAC),内置角色包括 read、readWrite、dbAdmin、userAdmin 等。应用用户应仅分配所需数据库的 readWrite 角色。

网络安全:绑定监听地址(net.bindIp: 127.0.0.1,10.0.0.1),修改默认端口(net.port: 27018),启用 TLS 加密(net.tls.mode: requireTLS)。使用防火墙限制访问来源。

审计日志:MongoDB Enterprise 提供审计功能(auditLog 配置),可以记录数据库操作、认证事件和 DDL 操作。社区版可使用 profiler 功能记录慢查询和全表扫描操作。

通用数据库安全措施

定期备份:建立自动化的数据库备份机制,备份文件加密存储。遵循 3-2-1 备份原则(3 份副本、2 种介质、1 份异地存储)。定期验证备份的完整性和可恢复性。

补丁管理:及时更新数据库版本和安全补丁。关注数据库官方的安全公告(如 Oracle Critical Patch Update、Redis Security Announcements),评估并修复已知漏洞。

数据加密:对敏感数据进行加密存储(应用层加密或数据库透明数据加密 TDE)。确保加密密钥的安全管理,与数据库数据分开存储。

实战要点

  • 消除默认配置风险:数据库安全加固的第一步是消除默认配置的安全风险,包括默认密码、默认端口、默认监听地址和默认认证配置。部署完成后立即进行安全初始化。
  • 网络层隔离优先:在应用层安全措施之外,通过网络层的防火墙规则和 VLAN 隔离确保数据库只能被授权的应用服务器访问,减少网络层面的攻击面。
  • 监控异常查询:通过审计日志或查询日志监控异常的数据库操作,如大量的 SELECT * 查询、异常的数据导出操作、非工作时间的数据库访问等。
  • 定期权限审计:定期(至少每季度一次)审查数据库用户和权限配置,移除不再需要的用户和权限,确保权限分配符合最小权限原则。
  • 防止SQL注入:数据库安全加固是纵深防御的一环,应用层面的 SQL 注入防护同样重要。使用参数化查询、ORM 框架和输入验证,从源头防止 SQL 注入攻击。

总结

数据库安全加固是保护数据资产的关键措施。通过认证加固、权限最小化、网络隔离和审计日志四大手段的综合运用,可以有效降低数据库被攻击和数据泄露的风险。在加固过程中要注意数据库版本和业务需求的差异,制定针对性的加固方案,并通过自动化工具持续监控合规状态。

← 日志分析与溯源 数字签名与证书体系 →