Laravel本地连接SQL Server报目标主机主动拒绝连接问题求助
SQL Server连接被拒绝排查方案
报错SQLSTATE[08001] TCP Provider: No connection could be made because the target machine actively refused it的核心原因是TCP请求到达目标端口时没有对应服务响应,和账号权限、Laravel逻辑无关,优先排查网络连通性和SQL Server服务配置,按以下顺序验证:
- 先做端口连通性校验,不要直接信配置管理器的显示值,打开命令提示符执行
telnet 127.0.0.1 1433:如果窗口直接跳转黑屏代表端口连通正常,提示连接失败则说明1433端口没有服务监听,这是你当前报错的直接原因。 - 端口不通时按以下步骤修正SQL Server配置:
- 打开SQL Server配置管理器,进入「SQL Server网络配置」-「对应实例的协议」节点,确认TCP/IP协议状态为已启用,默认安装的Express版本该选项默认是禁用状态。
- 右键TCP/IP选择「属性」,切换到「IP地址」标签页,拉到最底部的
IPAll分组,清空「TCP动态端口」栏的所有数值,在「TCP端口」栏手动填入1433,注意不要漏改IP1、IP2等分组里的端口值,所有绑定到127.0.0.1的IP项端口都统一设为1433。 - 修改完成后必须回到「SQL Server服务」节点,重启对应SQL Server实例的服务,不重启配置不会生效。
- 端口连通后再调整Laravel配置,避开常见配置错误:
- 如果使用Windows身份认证连接,
DB_USERNAME和DB_PASSWORD两个参数直接留空即可,sqlsrv扩展会自动读取运行PHP进程的Windows账号权限做认证,你之前测试的主机名\用户名、正斜杠格式的用户名都是无效写法,反而会导致认证失败。 - 如果使用SQL Server身份认证,先打开SSMS客户端,单独用你创建的Laravel账号登录验证,确认账号开启了SQL Server登录权限、密码未过期、对MYDB库有对应操作权限,不要直接在Laravel里盲测配置。
- 本地环境
DB_HOST直接填127.0.0.1即可,不要填计算机名、localhost,避免主机名解析、IPv6优先级导致的连接异常,参考正确配置如下:
- 如果使用Windows身份认证连接,
DB_CONNECTION=sqlsrv DB_HOST=127.0.0.1 DB_PORT=1433 DB_DATABASE=MYDB # Windows认证留空下方两个参数,SQL认证填入对应账号密码 DB_USERNAME= DB_PASSWORD=
- 修改完.env文件后,必须在项目根目录执行
php artisan config:clear清除Laravel的配置缓存,否则框架会继续读取旧的配置值,所有配置修改都不会生效。 - 特殊场景排查:如果你安装的是SQL Server命名实例(比如默认的SQLEXPRESS实例),除了上述绑死1433端口的方案,也可以在连接时指定实例名,格式为
DB_HOST=127.0.0.1\SQLEXPRESS,此时DB_PORT参数留空即可,注意要将SQL Server Browser服务设为自动启动并保持运行,否则无法解析实例对应的端口。
内容的提问来源于stack exchange,提问作者abdullah albar
相关产品推荐
相关产品推荐

