本文目录导读:

数据库漏洞加固是一个系统性工程,需要从架构、访问控制、配置、补丁、审计等多个维度进行,以下是具体的加固策略和操作步骤,按优先级排序:
核心原则:最小权限与默认拒绝
这是最根本的防御思想。
-
账户权限最小化:
- 应用程序账户: 只能访问其需要的特定数据库(Schema)、表、列和执行必要的存储过程。绝不允许使用
sa(SQL Server)或root(MySQL)等高权限账户连接应用。 - 服务账户: 数据库服务本身使用的操作系统账户,应拥有运行所必需的最低权限,不应为
LocalSystem或Administrator。 - 禁用或删除默认账户: 禁用
guest,删除不必要的默认用户(如test、sys等)。 - 角色分离: 将数据库管理员(DBA)角色、备份操作员角色、安全管理员角色分离。
- 应用程序账户: 只能访问其需要的特定数据库(Schema)、表、列和执行必要的存储过程。绝不允许使用
-
默认拒绝网络访问:
- 不监听所有接口: 数据库服务应只监听需要使用的IP地址(如内网IP或特定应用服务器IP),绝对不要监听
0.0.0或 。 - 防火墙规则: 使用云安全组或主机防火墙(如
iptables、firewalld),仅允许指定的应用服务器IP和端口访问数据库端口(如 3306、1433、5432、27017等)。
- 不监听所有接口: 数据库服务应只监听需要使用的IP地址(如内网IP或特定应用服务器IP),绝对不要监听
配置加固:消除已知风险
-
修改默认端口:
将默认端口(如 MySQL 3306, SQL Server 1433, MongoDB 27017)改为不常见的高位端口,这并非绝对安全,但能有效阻止大量自动化扫描攻击。
-
禁用不必要的功能和服务:
- 禁用远程访问/远程登录: 如果不需要从远程管理数据库,禁用
xp_cmdshell(SQL Server)、remote access等。 - 禁用危险存储过程: 在 SQL Server 中,严格限制或彻底移除
xp_cmdshell、xp_regwrite、sp_oacreate等可能导致命令执行的扩展存储过程。 - 关闭不必要的协议: 仅启用必要的网络协议(如 TCP/IP),禁用 Named Pipes、Shared Memory、VIA 等。
- 禁用远程访问/远程登录: 如果不需要从远程管理数据库,禁用
-
密码策略强硬化:
- 强制复杂密码: 设置密码长度、复杂度、过期时间,MySQL可以启用
validate_password插件。 - 定期更换密码: 特别是 DBA 和应用程序连接账户的密码。
- 禁用空密码和弱哈希: 确保所有账户都使用强哈希算法(如 SHA-256 及以上,避免使用 MD5、SHA-1)。
- 强制复杂密码: 设置密码长度、复杂度、过期时间,MySQL可以启用
-
日志与审计配置:
- 开启审计日志: 记录所有登录尝试(成功/失败)、DDL操作(建表、删表)、DML操作(重要数据的增删改)、权限变更等。
- 日志保护: 确保日志文件不能被普通用户或攻击者删除或篡改,日志应定期归档并发送至中央日志服务器(如ELK、Splunk)。
漏洞修复与补丁管理
这是针对具体CVE漏洞的直接手段。
- 保持最新版本:
- 订阅官方安全公告(如 Oracle Critical Patch Update, Microsoft Security Response Center, MySQL Release Notes)。
- 建立补丁测试流程: 在预发布环境充分测试补丁兼容性后,再部署到生产环境。
- 考虑云托管服务: 如果使用云数据库(RDS、Azure SQL等),底层补丁由云厂商负责,可大大减轻运维负担。
网络与架构隔离
从外部缩小攻击面。
-
使用网络隔离(VPC/子网):
- 将数据库放在独立的、安全策略严格的私有子网中。
- 应用服务器与数据库之间使用内部网络通信,不经过公网。
-
使用数据库防火墙/代理:
- 部署专门的数据库防火墙(如 Imperva、GreenSQL)或基于云的数据库代理(如阿里云RDS Proxy、AWS RDS Proxy)。
- 功能优势: 可以识别并阻止SQL注入、异常查询行为、暴力破解、权限滥用等攻击。
-
加密通信:
- 传输层加密: 强制所有客户端使用 TLS/SSL 加密连接,避免使用明文传输用户名、密码和查询数据。
- 存储层加密: 对磁盘上的数据文件(TDE:透明数据加密)和备份文件进行加密,即使物理磁盘被盗,数据也无法直接读取。
针对特定常见漏洞的加固
-
应对 SQL 注入:
- 根本原因: 动态拼接SQL字符串。
- 加固方法:
- 应用层: 强制使用参数化查询(Prepared Statements)或存储过程。
- 数据库层: 关闭
multi-statement选项(如果可能),限制动态SQL的执行权限。
- 补充措施: 部署Web应用防火墙(WAF)并配置针对SQL注入的防护规则。
-
应对暴力破解:
- 配置账户锁定策略(如连续3次失败后锁定5分钟)。
- 启用IP白名单。
- 使用数据库监控工具检测短时间内大量失败的登录尝试。
持续监控与响应
加固不是一次性动作,而是持续过程。
- 定期安全扫描:
使用数据库扫描工具(如 QualysDB, Nessus 的数据库插件)或开源工具(如 sqlmap 用于评估)定期检查已知漏洞和弱配置。
- 审计日志分析:
- 建立规则,自动检测异常行为,如:
- 非工作时间的高负载查询。
- 从未知IP的登录。
- 大量
DROP、ALTER操作。 - 访问敏感列(如信用卡号、身份证号)。
- 建立规则,自动检测异常行为,如:
一个通用的加固检查清单
| 类别 | 检查项 | 示例操作 |
|---|---|---|
| 访问控制 | 权限最小化 | 应用账户只有 SELECT, INSERT, UPDATE 权限,无 DELETE, DROP |
| 网络 | 绑定地址 | bind-address = 192.168.1.100 |
| 密码 | 强密码策略 | validate_password.policy=STRONG |
| 功能 | 禁用危险功能 | 禁用 xp_cmdshell, local_infile |
| 加密 | 传输加密 | 要求所有客户端使用 --ssl-mode=REQUIRED |
| 审计 | 开启审计日志 | 记录所有登录失败及DDL操作 |
| 补丁 | 版本更新 | 定期更新到最新安全维护版本 |
| 备份 | 数据加密 | 对备份文件进行AES-256加密 |
最后建议: 如果您负责核心业务系统,建议聘请专业安全公司进行数据库渗透测试,或使用云数据库的原生安全服务(如阿里云RDS的SQL审计、安全组、白名单;AWS RDS的S3审计日志、IAM数据库认证等)。