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

PHP测试脚本无法连接SQL Server的问题排查与解决求助

SQL Server 连接失败排查与解决(PHP sqlsrv)

测试脚本

我编写了以下PHP测试脚本验证SQL Server数据库连接:

<?php
$serverName = "ABC-XXXXXXX";
$uid = "my_user";
$pwd = "my_password";
$databaseName = "my_database";

$connectionInfo = array("UID"=>$uid,
                        "PWD"=>$pwd,
                        "Database"=>$databaseName);

$conn = sqlsrv_connect( $serverName, $connectionInfo);

var_dump($conn);

初始排查方向

连接失败,初步推测原因:

  • $serverName 配置错误
  • 用户权限不足

获取$serverName的步骤(通过SSMS)

  • 打开对象资源管理器
  • 右键目标数据库,选择「属性」
  • 左侧栏点击「查看连接属性」
  • 取「服务器环境」区域的「计算机名称」值作为$serverName

权限配置尝试

通过SSMS操作+执行以下SQL语句授予用户权限:

USE [my_database];

GRANT SELECT, UPDATE, INSERT, DELETE 
ON SCHEMA :: [dbo] TO my_user;

执行成功后,在SSMS中确认用户对dbo架构的增删改查权限已勾选,但不确定是否遗漏其他权限。

环境信息:Web服务器为IIS,操作系统Windows 10。

错误排查与更新

更新1:打印错误信息

调用sqlsrv_errors()得到错误:Login failed for user 'my_user'

更新2:修改身份验证模式

将「服务器身份验证」设置为「SQL Server和Windows身份验证模式」后,新错误:Cannot open database "my_database" requested by the login. The login failed.

更新3:授予连接数据库权限

在「安全性>登录名>my_user>属性>安全对象」中勾选「连接任意数据库」后,错误变为:The SELECT permission was denied on the object 'block_content', database 'my_database', schema 'dbo'.

更新4:添加到服务器角色

将用户添加到sysadmin服务器角色后,测试脚本成功连接,不确定此前操作是否有辅助作用。

总结与优化建议

  1. 从错误流程来看,权限及身份验证配置是核心问题:
    • 初始登录失败:SQL Server未启用SQL Server和Windows身份验证模式(混合模式),导致SQL登录账户无法使用
    • 数据库无法打开:登录账户my_user没有访问my_database的权限
    • 对象权限被拒绝:即使给了dbo架构的增删改查权限,可能存在对象级的显式拒绝,或架构权限未覆盖到具体对象
  2. 不建议直接添加到sysadmin服务器角色,这会赋予过高的系统权限,存在安全风险。更安全的最小权限配置方案:
    • 首先确保登录账户my_user在my_database中存在对应的数据库用户:
      USE [my_database];
      CREATE USER [my_user] FOR LOGIN [my_user];
      
    • 授予数据库用户对目标对象的必要权限,比如针对block_content表:
      USE [my_database];
      GRANT SELECT, UPDATE, INSERT, DELETE ON [dbo].[block_content] TO [my_user];
      
    • 如果需要对整个dbo架构下的所有对象生效,可授予架构级的控制权限(避免遗漏单个对象):
      USE [my_database];
      -- 取消可能存在的显式拒绝权限
      REVOKE SELECT ON [dbo].[block_content] TO [my_user];
      -- 授予dbo架构的控制权限
      GRANT CONTROL ON SCHEMA :: [dbo] TO [my_user];
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:52:51