Node.js通过IP地址连接SQL Server失败的排查与解决建议
解决Node.js通过IP连接SQL Server被拒绝的问题
针对你遇到的「用localhost能连但用IP地址连接时被目标机器主动拒绝」的问题,按以下步骤排查配置:
1. 开启SQL Server的TCP/IP远程连接
- 打开SQL Server配置管理器,依次展开「SQL Server网络配置」→ 对应实例的「协议」,确保「TCP/IP」处于启用状态。
- 双击「TCP/IP」切换到「IP地址」标签,找到目标IP(172.20.10.1),将「已启用」设为「是」,「TCP端口」指定为1433(SQL Server默认端口),设置完成后重启SQL Server服务。
2. 确保SQL Server浏览器服务运行(针对命名实例)
如果你的SQL Server是命名实例(而非默认实例),必须启动「SQL Server浏览器」服务,否则远程无法通过IP定位到实例。
3. 配置防火墙放行端口
- 在SQL Server所在主机的防火墙中,添加入站规则,允许TCP协议的1433端口(或自定义实例端口)通过。
- 同时检查Node.js运行环境(或虚拟Android环境)的防火墙,确保允许出站连接到目标IP的1433端口。
4. 调整Node.js连接配置
- 若使用命名实例,需在
server字段中追加实例名,格式为IP地址\实例名,例如172.20.10.1\SQLEXPRESS。 - 加密选项适配:如果SQL Server未配置SSL加密,可将
encrypt设为false,或保持encrypt: true并添加trustServerCertificate: true(仅开发环境推荐)。调整后的配置示例:
const sql = require('mssql/msnodesqlv8'); const config = { user: 'sa', password: '123456', server: '172.20.10.1', // 命名实例改为'172.20.10.1\SQLEXPRESS' database: 'coffee', options: { encrypt: true, trustServerCertificate: true, // 新增此配置跳过证书验证 }, }; // 后续连接代码不变 sql.connect(config) .then(pool => { console.log('Connected to SQL Server'); return pool.request().query('SELECT * FROM coffee_info'); }) .then(result => { console.log(result.recordset); }) .catch(err => { console.error('Error:', err); }) .finally(() => { sql.close(); });
5. 验证网络连通性
在Node.js运行环境(或虚拟Android环境)中,用以下命令测试端口是否可达:
- Windows PowerShell:
Test-NetConnection 172.20.10.1 -Port 1433 - 命令提示符:
telnet 172.20.10.1 1433
如果测试失败,优先排查网络路由、防火墙拦截问题。
6. 确认SQL Server登录权限
打开SQL Server Management Studio,依次进入「安全性」→「登录名」→「sa」,右键选择「属性」,在「状态」标签页中确认「允许连接到数据库引擎」已启用。
内容的提问来源于stack exchange,提问作者NgThang2001
相关产品推荐
相关产品推荐

