我正在嘗試使用PHP連接到Microsoft SQL Server數據庫(在IIS中)。代碼中提供的用戶/密碼是一個AD帳戶,可以通過Access中的ODBC訪問數據庫。如何在PHP中使用NT身份驗證連接?
$serverName = "servername";
$connectionInfo = array("Database"=>"dbname", "UID"=>"myuser", "PWD"=>"mypass");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if($conn) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br /><pre>";
die(print_r(sqlsrv_errors(), true));
}
用戶名和密碼與服務器名稱和數據庫名稱一樣有效。但是,這是返回錯誤:
[Microsoft][SQL Server Native Client 10.0][SQL Server]Login failed for user 'myuser'.
對於用戶名(這是AD的有效用戶,我可以連接/鏈接到該數據庫採用Access)我也試過:
- DOMAIN.ORG \ myuser的
- DOMAIN.ORG \\ myuser的
- [email protected]
我的域用戶(myuser
)具有管理員通過AD向該服務器授予特權。但是,返回相同的Login failed
錯誤。有什麼我失蹤?我可以使用Access連接到相同的數據庫,而不會出現問題(在同一用戶下)。
我在Access中連接的方式是本地用戶的ODBC數據源。數據源設置爲「使用網絡登錄ID進行Windows NT身份驗證」進行身份驗證。我怎麼能在PHP中做到這一點?
是this impersonation configuration可能的原因?
PHP的用戶nt authority\iusr
下運行。如果有人嘗試使用iusr
不會錯誤消息相告登錄?
我已經試過這臺名爲「TestDS」關於創建數據源,並使用代碼:
$conn = odbc_connect("TestDS", "", "");
但是,這給了我:
The specified DSN contains an architecture mismatch between the Driver and Application, SQL state IM014 in SQLConnect
MACHINE1是一個客戶端試圖訪問一個網頁(其中PHP代碼位於Machine2上),Machine2上的代碼正在將Machine3連接到SQL連接(servername
)。
我編輯了我的問題。所以我應該添加一個本地用戶'iusr'到SQL服務器上? – JBurace
是的,但在連接字符串中使用「可信連接」選項而不是用戶名/密碼。請注意,如果您的SQL Server位於不同的物理機器上(並且機器之間沒有Active Directory信任關係),那麼您將不得不使用SQL Server身份驗證而不是Windows身份驗證。 – Dai
我用SQL身份驗證去了。 – JBurace