使用Windows身份验证使用sqlsrv_connect连接到SQL Server

时间:2017-06-08 23:10:10

标签: php sql-server

使用Microsoft的PHP驱动程序连接到SQL Server的official guide看起来非常简单,所以我大部分都复制了文本:

$server = "serverlocation\prod";
$database = array( "Database"=>"temp");
$conn = sqlsrv_connect($server, $database);

echo "<pre>";

if ( $conn ) {
  echo "Connection established";
} else { 
  echo "Connection could not be established.<br />";
  die( print_r( sqlsrv_errors(), true));
}

当我运行代码时,出现以下错误:

Connection could not be established.
Array
(
    [0] => Array
        (
            [0] => 28000
            [SQLSTATE] => 28000
            [1] => 18456
            [code] => 18456
            [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for user '*****DOMAIN\MY_MACHINE_NAME*****'.
            [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for user '*****DOMAIN\MY_MACHINE_NAME*****'.
        )

我在错误消息中列出的计算机名称上运行此代码,这是一台Windows计算机,但列出的计算机名称不是我登录的用户帐户。我所在的用户帐户登录后拥有此数据库的权限,(我可以使用MS SQL Server Managment Studio连接到它...)但是当我尝试使用此脚本进行连接时,它会显示我的机器名而不是我的用户帐户。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

假设您通过网络运行此功能:

  • 您应该使用IIS而不是Apache
  • IIS必须启用Windows身份验证
  • 必须禁用匿名身份验证
  • 您必须在fastcgi.impersonate = 1
  • 中设置php.ini

假设您登录的帐户被SQL Server识别,您应该好好去。有关完整讨论,请参阅this page

在该帖子的评论中,作者建议may also be possible with Apache