如何加固SQL连接配置_限制应用服务器连接数据库的IP

星敏君_4200

星敏君_4200

2026-03-30

713人浏览

原创

数据库必须配置ip白名单而非仅依赖应用层,因云/容器环境ip动态变化;应使用环境变量和密钥管理服务管控连接参数;连接池需设超时与轻量验证语句;注意nat/slb导致的源ip变形,以日志实际ip为准配置。

如何加固sql连接配置_限制应用服务器连接数据库的ip

数据库端必须配置白名单,不能只靠应用层“自觉”

应用服务器的 IP 不是固定不变的,尤其在容器或云环境里,192.168.0.100 今天是 A 服务,明天可能被回收分给 B 服务。只在应用代码里写死连接地址、不设数据库访问控制,等于把锁装在门外——门本身没锁。

实操建议:

  • MySQL:在 mysql.user 表中用 HOST 字段限制,例如创建用户时指定 'app_user'@'10.20.30.40',**禁止用 '%' 通配符**
  • PostgreSQL:修改 pg_hba.conf,添加类似 host all app_user 10.20.30.40/32 md5 的行,改完必须 pg_ctl reload 或重启服务
  • Oracle:没有原生 IP 白名单,需依赖网络层(如防火墙)或使用 SQLNET.ALLOWED_LOGON_VERSION_SERVER + 网络 ACL 配合
  • 注意:云数据库(如阿里云 RDS、AWS RDS)通常提供「安全组」或「白名单 IP 列表」控制台配置,优先走这个路径,比改内核配置更稳

连接字符串里别暴露密码,也别硬编码 IP

很多团队把 jdbc:mysql://10.20.30.40:3306/mydb?user=app&password=123456 直接塞进配置文件甚至代码里,这会让 IP 和凭证同时失控。IP 变了要改代码,密码泄露就直接崩盘。

实操建议:

  • 用环境变量注入连接参数,例如 JDBC_URL=jdbc:mysql://${DB_HOST}:${DB_PORT}/mydb,再通过启动命令传入 DB_HOST=10.20.30.40
  • 密码绝不进 Git,用密钥管理服务(如 HashiCorp Vault、AWS Secrets Manager)或 K8s Secret 挂载
  • 如果用 Spring Boot,优先配 spring.datasource.hikari.jdbc-url 而非拆成 host/user/password 字段,减少拼接出错概率
  • 检查日志是否意外打印完整 JDBC_URL —— 某些框架默认开启 debug 日志会吐出密码字段,需关闭或过滤

连接池超时与验证语句必须设,否则失效 IP 不会及时踢掉

应用连的是连接池,不是每次请求都新建 TCP 连接。如果数据库侧 IP 白名单变了(比如运维删了旧 IP),而连接池里的旧连接还活着,它们照样能继续查数据——你根本不知道防线已经漏了。

实操建议:

  • HikariCP 必配:connection-timeout=3000(避免卡死)、validation-timeout=3000、connection-test-query=SELECT 1(MySQL)或 isValid(1)(JDBC 4.1+ 推荐)
  • Druid 建议启用 testWhileIdle=true + timeBetweenEvictionRunsMillis=30000,定期探活
  • 所有验证语句必须是轻量级的,禁用 SELECT NOW() 这类带函数调用的,某些数据库权限模型下它可能被拒绝执行
  • 测试方法:手动从数据库白名单里删掉应用服务器 IP,观察应用是否在 1–2 分钟内报出 Access denied for user 或 Connection refused,而不是静默失败或卡住

别忽略 NAT 和负载均衡带来的 IP “变形”

应用服务器前面有 SLB、Nginx、K8s Service 或云厂商的 ALB?那数据库看到的 REMOTE_ADDR 很可能不是真实应用服务器 IP,而是中间设备的出口 IP。这时候按应用机器 IP 配白名单,永远连不上。

实操建议:

  • 先确认数据库日志里实际记录的连接来源 IP 是什么:MySQL 查 general_log,PostgreSQL 看 log_connections = on 输出
  • 如果用了 SNAT 或 Full-NAT 模式(如阿里云经典网络 SLB),只能把 SLB 的后端网段加进白名单,或改用支持 PROXY protocol 的方案(如 MySQL 8.0+ + HAProxy)
  • K8s 场景下,Service 类型为 ClusterIP 时,数据库看到的是 Node IP;类型为 LoadBalancer 或 ExternalIP 时,看到的是外部入口 IP —— 必须按实际观测到的 IP 配,不能想当然
  • 临时排障可以用 tcpdump -i any port 3306 在数据库机器抓包,看 SYN 包的源 IP 到底是谁

真正卡住人的从来不是“怎么加白名单”,而是 IP 在哪一层被替换、连接池缓存了多久、验证逻辑有没有真跑起来。多看一眼数据库日志里的实际连接来源,比翻十遍文档管用。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

900

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2752

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

916

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

829

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

414

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2496

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4632

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

747

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习