Php 使用Windows身份验证通过sqlsrv_connect连接到SQL Server
使用Microsoft的PHP驱动程序连接SQL Server的方法似乎非常简单,因此我复制了大部分文本:Php 使用Windows身份验证通过sqlsrv_connect连接到SQL Server,php,sql-server,Php,Sql Server,使用Microsoft的PHP驱动程序连接SQL Server的方法似乎非常简单,因此我复制了大部分文本: $server = "serverlocation\prod"; $database = array( "Database"=>"temp"); $conn = sqlsrv_connect($server, $database); echo "<pre>"; if ( $conn ) { echo "Connection established"; } else
$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));
}
我正在错误消息中列出的计算机名上运行此代码,这是一台Windows计算机,但列出的计算机名不是我登录的用户帐户。我登录的用户帐户具有此数据库的权限(我可以使用MS SQL Server Management Studio连接到此数据库,很好…),但当我尝试使用此脚本连接时,它会显示我的计算机名而不是我的用户帐户
我做错了什么?假设您在网络上运行此操作:
- 您应该使用IIS,而不是Apache†
- IIS必须启用Windows身份验证
- 必须禁用匿名身份验证
- 您必须在
php.ini中设置
fastcgi.impersonate=1
†在该帖子的评论中,作者建议这样做。我对PHP服务器了解不多。它是安装在IIS中的模块还是独立模块?基本上,它是作为web服务器帐户运行的,而不是作为您的帐户运行的。这里有一点讨论:根据Nick的评论,如果你阅读了你在问题中链接到的Microsoft文档的第一段,它会说“重要的是要注意,在大多数情况下,这意味着Web服务器的进程标识或线程标识(如果Web服务器使用模拟)用于连接到服务器,而不是最终用户的身份。”因此,web服务器似乎正在使用计算机帐户连接到数据库。
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*****'.
)