You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 10连接局域网SQL Server遇TCP Provider连接拒绝问题求助

解决Laravel 10连接局域网SQL Server被拒绝的问题(TCP Provider: 目标主动拒绝连接)

核心排查方向(针对ODBC测试成功但Laravel连接失败的场景)


1. 核对Laravel数据库加密配置(高频触发点)

ODBC测试默认可能未启用加密,但ODBC Driver 18 for SQL Server默认强制加密连接。检查你的.env配置:

DB_CONNECTION=sqlsrv
DB_HOST=目标机器IP或主机名
DB_PORT=1433 # 命名实例可改为 DB_HOST=目标IP\实例名,留空DB_PORT
DB_DATABASE=你的数据库名
DB_USERNAME=数据库账号
DB_PASSWORD=数据库密码
DB_ENCRYPT=false # 关键:和ODBC测试保持一致,关闭加密
DB_TRUST_SERVER_CERTIFICATE=true # 可选:如果目标服务器用自签名证书,需要开启

修改后执行php artisan config:clear刷新配置,再尝试连接。

2. 排查目标机器防火墙的精准规则

ODBC测试成功不代表防火墙对PHP/web服务器进程开放了端口:

  • 打开目标机器的Windows Defender防火墙,进入「高级设置」:
    • 添加入站规则:允许SQL Server程序(C:\Program Files\Microsoft SQL Server\MSSQLXX.MSSQLSERVER\MSSQL\Binn\sqlservr.exe)通过所有网络;或者直接允许1433端口(默认实例)/对应动态端口(命名实例)的TCP连接
    • 若使用命名实例,必须确保SQL Server Browser服务已启动(服务列表里找到该服务,设为自动启动),否则无法解析实例对应的动态端口
  • 临时测试:关闭目标机器防火墙,若Laravel能正常连接,说明是防火墙规则遗漏,再针对性添加允许规则。

3. 验证PHP原生连接(排除Laravel框架问题)

写一个简单的PHP脚本,直接用sqlsrv扩展测试连接,确认是否是Laravel配置的问题:

<?php
$server = "目标机器IP,1433"; // 命名实例用 "目标IP\实例名"
$config = [
    "Database" => "你的数据库名",
    "Uid" => "账号",
    "PWD" => "密码",
    "Encrypt" => "no"
];

$conn = sqlsrv_connect($server, $config);
if ($conn) {
    echo "连接成功";
} else {
    die(print_r(sqlsrv_errors(), true));
}
?>

如果脚本连接失败,说明是PHP环境或网络层面的问题;如果成功,回到Laravel检查config/database.php里的sqlsrv配置是否覆盖了.env的参数。

4. 确认SQL Server远程连接权限

  • 打开SQL Server Management Studio,右键目标服务器→「属性」→「连接」,勾选「允许远程连接到此服务器」
  • 检查登录账号的权限:确保用于连接的数据库账号拥有远程连接的权限,且默认数据库正确。

内容的提问来源于stack exchange,提问作者Salas23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:00:06