直接用IP连接数据库的核心操作是:确认数据库服务监听地址、放行防火墙端口、授权远程访问账号,然后通过数据库客户端或命令行工具指定IP和端口发起连接。
很多人第一次配置远程数据库时,习惯性把目光盯在客户端软件上,试了半天连不上,其实问题多半出在服务器端,下面按顺序拆解,从原理到实操一次说清。
数据库IP连接的基本原理
数据库默认安装后,往往只监听本机回环地址(127.0.0.1),这意味着只有服务器自己才能访问,想让其他机器通过IP连进来,得同时满足三个条件:数据库服务监听所有网卡或指定内网/公网IP、操作系统防火墙放行对应端口、数据库账号允许来自非本地主机的登录请求。
三个条件缺一不可。IP连接数据库本质上是一套链路验证,客户端发请求到服务器端口,数据库校验账号权限,两边都通过才建立会话。
服务器端核心配置步骤
修改数据库监听地址
以最常见的MySQL为例,它的配置文件通常位于/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/my.cnf,找到下面这行:
bind-address = 127.0.0.1
把它改成:
bind-address = 0.0.0.0
0.0.0代表监听所有IPv4地址,改完保存并重启服务:systemctl restart mysql。
PostgreSQL的配置在postgresql.conf文件里,修改listen_addresses = 'localhost'为listen_addresses = '',同时还要编辑pg_hba.conf文件添加一行类似host all all 0.0.0.0/0 md5的记录,这一步经常被忽略导致连不上。
防火墙放行端口
云服务商的安全组规则和服务器系统自带的防火墙是两个层面,都得处理。
Linux服务器执行以下命令放行MySQL默认端口3306:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
如果你用的是酷番云或简米云,还需要登录控制台,在安全组入方向添加一条规则,协议选TCP,端口填3306,来源建议填写你办公网络的外网IP而不是
0.0.0/0全放行。
Windows服务器操作路径是:控制面板 → Windows Defender防火墙 → 高级设置 → 入站规则 → 新建规则 → 端口 → TCP → 特定本地端口填3306 → 允许连接。
行业共识认为,安全组层面限制来源IP比只依赖服务器防火墙更有效,因为安全组在更外层拦截攻击流量。
MySQL的安全远程连接授权
改完配置文件只完成了一半,还得确保数据库账号本身有远程登录权限,MySQL的账号信息存储在mysql.user表里,Host字段决定了哪些IP可以连接。
登录MySQL后执行:
CREATE USER 'admin'@'%' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON . TO 'admin'@'%'; FLUSH PRIVILEGES;
是通配符,代表允许任何IP连接,如果只想让特定IP连,把换成具体IP,比如'192.168.1.100',更安全。
检查授权是否生效:
SELECT user, host FROM mysql.user;
云服务器连接本地数据库工具推荐
确认服务器端没问题后,客户端工具选择也是不少人在意的事,Navicat和DBeaver支持直连MySQL、PostgreSQL、SQL Server等多种数据库,填写主机名或IP地址、端口、用户名和密码即可连接,命令行方式则直接使用:
mysql -h 172.16.0.2 -P 3306 -u admin -p
-h指定服务器IP,-P指定端口,连接成功后会提示输入密码,出现mysql>提示符说明链路已通。
常见的IP连接失败原因排查
配置全看起来没问题,但仍然连不上的情况很常见,按下面顺序排查,大多数问题出在其中一环。
端口不通
在服务器本机执行netstat -tlnp | grep 3306,看看MySQL是否真的在监听,然后从你的电脑上执行
telnet 服务器IP 3306,如果命令卡住不动或报连接失败,大概率是防火墙拦截了。
账号权限不对
用错误的主机范围创建了账号,比如你从办公网连服务器,但授权时只允许了数据库服务器所在内网段IP,检查账号的Host字段是否覆盖了你当前的出口IP。
配置文件被覆盖
部分云服务商的数据库镜像会额外附带数据库配置管理工具,重启服务时会把bind-address改回去,检查是否开启了这类工具,或者考虑用SET GLOBAL bind_address='0.0.0.0'临时验证效果。
服务端口被篡改
MySQL默认端口是3306,但有些安全策略会把这些端口随机化,用ss -lntp查看数据库实际监听端口,别被默认配置误导,扫端口时注意,攻击者也在扫。
连接方式对比速查
不同类型数据库远程连接时的差异比较明显,整理如下:
| 数据库类型 | 默认端口 | 关键配置文件 | 远程连接前必改项 |
|---|---|---|---|
| MySQL | 3306 | my.cnf/mysqld.cnf | bind-address改0.0.0.0 |
| PostgreSQL | 5432 | postgresql.conf + pg_hba.conf | 两项都需要改 |
| SQL Server | 1433 | SQL Server配置管理器 | 启用TCP/IP协议 |
| Redis | 6379 | redis.conf | bind改IP并关闭保护模式 |
sqlserver远程连接数据库服务器配置要点
SQL Server的情况比较特殊,默认安装后TCP/IP协议是禁用的,单纯改防火墙没用。
操作步骤为:打开SQL Server配置管理器,找到SQL Server网络配置 → 实例名的协议 → 双击TCP/IP → 启用,在IP地址选项卡里,把IPAll的TCP端口设为1433,然后重启SQL Server服务。
另外需要注意,如果你在云服务器上部署,安全组的入站规则除了放行端口,还要考虑SQL Server浏览器服务依赖的UDP 1434端口,否则通过SSMS图形界面按实例名连接时会提示找不到服务器。
数据库引擎配置方面,用SQL Server Management Studio连接实例后,右键服务器属性 → 连接 → 勾选“允许远程连接到此服务器”,否则即便防火墙全通,SQL Server自身也会拒绝远程请求。
连接数据库的安全加固建议
远程开放数据库端口是有风险的,尤其是暴露在公网上的服务器,以下几条建议尽量别省。
- 不要用root账号远程连接,创建一个独立账号,只授予业务所需的最小权限,比如只给某个库的SELECT和INSERT权限。
- 限制来源IP,在安全组层面只允许你的办公IP访问数据库端口,或者用跳板机做中转,别把数据库直接暴露给整个互联网,据统计,公网上开放3306端口的IP每天都会收到大量扫描和暴力破解尝试。
- 修改默认端口,把端口从3306改成别的随机端口,可以阻挡很大一部分自动化攻击程序,但不能作为唯一安全手段。
- 启用SSL加密连接,MySQL支持通过
REQUIRE SSL选项强制客户端使用加密连接,避免密码和传输数据被明文截获。
常见问题解答
为什么用IP连接数据库提示“Host is not allowed to connect”
这个报错是指你的IP被MySQL拒绝了,执行SELECT user, host FROM mysql.user确认账号的Host字段是否包含你当前的IP,或者直接改成。
云服务器连接本地数据库工具选哪个
Navicat功能齐全但对付费有要求,DBeaver开源免费且支持几乎所有主流数据库,如果只是临时执行几条SQL,命令行客户端完全够用,没必要装重量级工具。
连接数据库时提示“Connection refused”是什么原因
通常是数据库服务没有在监听对应端口,或者防火墙拦截了请求,在服务器本机和客户端分别测试端口连通性,哪一步不通就检查哪一步的配置,本机测试通过但远程不通,问题集中在防火墙规则层面。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/677524.html





