2012-07-17 49 views
6

我正嘗試使用PHP連接到另一臺計算機上的SQL Server。我找到了兩種方法來做到這一點。用odbc_connect或sqlsrvr連接。使用Windows帳戶通過PHP連接到SQL Server

$connection = odbc_connect("Driver={SQL Server Native Client 10.0};Server=$serverName;Database=$db;", 'user', 'pass'); 

$conn = sqlsrv_connect($serverName, array('UID' => '', 'PWD' => '')); 

的連接工作,如果我嘗試連接到SQL帳戶。不幸的是,我無法使用Windows身份驗證進行連接。

到目前爲止,我已經嘗試了以下內容:使用了工作通行證,添加了Trusted_Connection = yes;或集成安全= SSPI; 。我也嘗試將此與fastcgi.impersonate = 1或0結合使用。

當我直接使用我的用戶並傳遞了我登錄被拒絕的錯誤,並且當我嘗試使用sspi進行Windows身份驗證時,我收到以下錯誤:登錄失敗爲用戶'NT AUTHORITY \ ANONYMOUS LOGON'。

我已經搜索了很多問題,但我找不到解決方案。但是有人在談論不使用網絡服務帳戶的php,這可能是問題所在。

有沒有人知道我可以如何解決這個問題,或者給我一個領導?

預先感謝您。

+0

您將使用您的php進程(或web服務器進程)正在運行的UID登錄。 – 2012-07-17 14:43:00

+0

有什麼方法可以改變進程在運行的用戶嗎?我以前沒有這樣做過,我很感激「傻瓜」類型的鏈接。我一直認爲在我登錄時運行的應用程序會使用我的帳戶運行。 – sias 2012-07-17 14:45:27

+0

取決於您的網絡服務器,但在更改操作UID時需要考慮很多事項 - 除非您正確操作,否則可能會完全中斷Web服務器。 – 2012-07-17 14:46:19

回答

1

主要問題是,用來連接到服務器的身份永遠是在PHP運行

This鏈接可以幫助你的進程的標識。

+0

嗨。我已經閱讀了這篇文章。不幸的是,他提出的解決方案並不適合我。模擬設置不起作用,用戶在嘗試連接Windows身份驗證時始終保持不變。 – sias 2012-07-17 14:40:43

0

你試過$conn = sqlsrv_connect($serverName);

數組是可選的。 Windows身份驗證用作默認值。請參閱MSDN article

IIS應啓用Windows身份驗證並關閉匿名訪問。

+0

是的。同樣的錯誤:用戶登錄失敗'NT AUTHORITY \ ANONYMOUS LOGON' – sias 2012-07-17 14:54:25

+0

PHP web服務器是IIS嗎? – 2012-07-17 15:18:52

+0

如果這樣匿名訪問將被設置爲false並且Windows身份驗證設置爲true。 – 2012-07-17 15:23:41

1

我能夠建立信任到遠程SQL服務器從PHP一個單獨的IIS服務器上運行使用連接:

$connectionInfo = array('Database' => $dbname); 
$con = sqlsrv_connect($servername,$connectionInfo); 

在php.ini:爲

fastcgi.impersonate = 0 
mssql.secure_connection = On 

在IIS我PHP網站:SQL Server上

Anonymous Authentication = Disabled 
Windows Authentication = Enabled 
Application Pool settings for site: Integrated, Network Service 

數據庫安全的DBNAME $數據庫:

create login: domainname\iisservername$ 
map domainname\iisservername$ to db_datareader privilege for $dbname database 

注意:iisservername中的$非常重要。通過以上設置,IIS將與SQL服務器建立可信連接,而無需在您的PHP文件中存儲用戶標識和密碼信息。本地應用程序池使用的權限是「網絡服務」。遠程地,這些權限以用戶域名\ iisservername $的形式通過網絡傳遞。

1

對於IIS 7.5上的PHP,無需用戶名和密碼就可以使用SSPI身份驗證進行連接。我必須執行以下操作:

在我的IIS應用程序池高級設置中,我將它設置爲使用自定義帳戶Domain \ username到我需要PHP連接的用戶。

在我的IIS特定網站中,我將基本設置更改爲Connect作爲相同的Domain \用戶名。

在我的PHP代碼,然後我可以連接使用$conn = sqlsrv_connect($dbhost, array("Database" => $dbname, "UID" => "", "PWD" => ""));

其他說明:fastcgi.impersonate = 1 我只有:匿名身份驗證啓用 *

0
  1. 打開IIS控制檯
  2. 配置您的應用程序池身份與所需的用戶,必須在您的SQL Server +數據庫中有足夠的權限
  3. S選擇你的「特定的網站」
  4. 打開「身份驗證」設置
  5. 的「匿名身份驗證」單擊鼠標右鍵,單擊「編輯」
  6. 到最後選擇的選項:應用程序池標識(單選按鈕),然後按「確定」按鈕以應用更改。
相關問題