本文目录导读:

针对数据库未授权访问的拦截,需要从网络层、应用层、数据库自身配置、以及监控应急几个维度构建纵深防御体系,以下是具体的拦截方案和最佳实践:
网络边界拦截(最基础、最有效)
这是阻止外部攻击者直接连接数据库的第一道防线。
- 禁止数据库端口暴露在公网:
- 操作:检查防火墙/安全组策略,确保数据库端口(如 MySQL 3306、PostgreSQL 5432、Redis 6379、MongoDB 27017)仅对特定的应用服务器 IP 开放,严禁 0.0.0.0/0。
- 拦截效果:直接阻断来自互联网的所有未授权连接请求。
- 使用VPN/堡垒机:
- 操作:要求所有数据库操作必须通过 VPN 接入内网,或通过堡垒机(JumpServer)进行身份认证和审计。
- 拦截效果:即使端口开放,未通过 VPN 或堡垒机认证的流量会被拒绝。
- 部署WAF或数据库防火墙:
- 操作:在数据库前端部署专门的安全设备,配置白名单策略(只允许特定源IP、特定SQL语句类型通过)。
- 拦截效果:可以检测并拦截暴力破解、SQL注入等尝试。
数据库自身配置加固(核心防线)
即使是内部网络,也必须假设网络可能被突破,需要数据库自身具备拦截能力。
- 绑定监听地址:
- 操作:在数据库配置文件中,将
bind-address设置为0.0.1或内网 IP,而不是0.0.0。 - 配置文件示例(MySQL):
[mysqld] bind-address = 127.0.0.1 # 仅允许本机访问 # 或 bind-address = 192.168.1.100 # 仅允许内网特定IP访问
- 操作:在数据库配置文件中,将
- 最小权限原则:
- 操作:删除或禁用默认管理员账户(如 root/dba),为每个应用创建专用账号,只授予该应用所需的数据库和表的
SELECT/INSERT/UPDATE/DELETE权限,严禁使用GRANT ALL。 - 命令示例:
-- 错误做法 GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'%'; -- 正确做法 GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app_user'@'app_server_ip' IDENTIFIED BY 'strong_password';
- 操作:删除或禁用默认管理员账户(如 root/dba),为每个应用创建专用账号,只授予该应用所需的数据库和表的
- 强制身份认证与密码策略:
- 操作:禁止使用
auth_socket或unix_socket插件(除非明确需要),启用密码复杂度检查(长度、字符类型),定期更换密码。 - 拦截效果:防止弱口令被暴力破解。
- 操作:禁止使用
- 启用SSL/TLS加密:
- 操作:强制客户端使用 SSL 连接数据库。
- 拦截效果:即使攻击者截获网络包,也无法解析通信内容,且无法通过重放攻击获取会话。
- 关闭不必要的功能与账户:
- 操作:删除
test数据库;禁用local-infile(防止文件读取攻击);禁用xp_cmdshell(SQL Server)等危险存储过程。
- 操作:删除
应用层身份验证加强
如果用户是通过 Web 应用间接访问数据库,需要在应用层进行拦截。
- 强制强密码与多因素认证:
- 操作:应用登录页要求密码包含大小写、数字、特殊字符且长度≥12位,对管理员后台强制启用 MFA(如手机验证码、TOTP)。
- 拦截效果:防止撞库和弱口令爆破。
- 双因素认证(2FA):
- 操作:对数据库管理工具(如 Navicat, DBeaver)或 API 接口启用 2FA。
- 拦截效果:即使密码泄露,攻击者也无法在没有第二因子(如动态令牌)的情况下登录。
实时监控与主动阻断(应急拦截)
当网络、配置、身份认证都被突破时,需要依赖行为分析进行实时拦截。
- 部署数据库审计系统:
- 操作:使用工具(如 MySQL Enterprise Audit, MongoDB Audit, 或第三方工具如 DataSunrise, Imperva)实时解析所有 SQL 语句。
- 拦截规则:
- 检测到
SELECT * FROM user WHERE password = ...(弱口令尝试)。 - 检测到
SELECT @@version(信息探测)。 - 检测到大量失败的登录尝试(暴力破解)。
- 配置自动阻断:当触发阈值时,审计系统会自动向防火墙发送指令封禁源IP,或直接 Kill 该连接。
- 检测到
- 设置连接数/频率限制:
- 操作:在数据库或应用层限制单个IP的并发连接数和查询频率。
- 拦截效果:防止慢查询耗尽资源和批量查询。
网络层深度包检测(DPI)
- 操作:在核心交换机或防火墙上开启 DPI 功能,识别并拦截非数据库协议的流量(如 HTTP 请求连接 3306 端口)。
- 拦截效果:防止利用端口复用或隧道工具绕过网络防火墙。
最佳实践行动清单
为了在实际操作中有效拦截未授权访问,建议按以下优先级执行:
-
立即执行(最紧急):
- 检查所有云服务器的安全组:确保数据库端口(3306, 5432, 6379等)没有
0.0.0/0的入站规则,如果发现,立刻删除。 - 修改默认端口:将默认端口改为高位端口(如 3306 -> 13306),可以有效绕过批量扫描脚本。
- 检查所有云服务器的安全组:确保数据库端口(3306, 5432, 6379等)没有
-
日常加固(必须做):
- 创建非 root 的专用应用账号,并授予最小权限。
- 启用数据库的审计日志并配置告警。
- 为数据库管理工具配置 SSH 隧道或 VPN,而不是直接暴露。
-
高级防御(可选但有效):
- 部署数据库防火墙或 WAF。
- 对管理后台启用 MFA。
核心原则
永远不要信任网络。 即使在内网,也可能存在横向移动攻击。 将数据库视为核心资产,默认拒绝所有访问,仅按需开放。
通过 “网络白名单 + 数据库最小权限 + 强身份认证 + 行为审计” 的组合策略,可以拦截绝大多数数据库未授权访问的企图。