如何:使用 Windows 驗證進行連接
根據預設,SQL Server Driver for PHP 會嘗試使用 Windows 驗證連接到 SQL Server。請注意很重要的一點,在大多數的案例中,這表示會使用 Web 伺服器的處理序識別或執行緒識別 (如果 Web 伺服器正在使用模擬) 來連接伺服器,而不是使用使用者的識別。
當您使用 Windows 驗證連接 SQL Server 時,必須考量以下要點:
- 執行 Web 伺服器的處理序 (或執行緒) 所使用的認證必須對應到有效的 SQL Server 登入,才能建立連接。
- 如果 SQL Server 和 Web 伺服器位於不同電腦上,必須設定 SQL Server 來啟用遠端連接。
注意
當您建立連接時,可以設定類似 Database 和 ConnectionPooling 的連接屬性。如需支援之連接屬性的完整清單,請參閱<sqlsrv_connect>。
每當下列其中一個可能原因成立時,都應該使用 Windows 驗證來連接 SQL Server:
- 驗證期間不會透過網路傳送任何認證;使用者名稱和密碼不會內嵌在資料庫連接字串中。這表示,惡意使用者或攻擊者將無法藉由監視網路或檢視組態檔內的連接字串來取得認證。
- 使用者受限於集中式帳戶管理;將會強制使用安全性原則 (如密碼過期期限、最小密碼長度以及多次無效登入要求之後的帳戶鎖定)。
如果 Windows 驗證不是實用的選項,請參閱<如何:使用 SQL Server 驗證進行連接>。
範例
下列範例使用 Windows 驗證來連接 SQL Server 的本機執行個體。在建立連接之後,將會查詢伺服器,找出正在存取資料庫之使用者的登入。
此範例假設 SQL Server 和 AdventureWorks 資料庫已經安裝在本機電腦上。當從瀏覽器執行此範例時,所有輸出都會寫入瀏覽器。
<?php
/* Specify the server and connection string attributes. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
/* Connect using Windows Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Unable to connect.</br>";
die( print_r( sqlsrv_errors(), true));
}
/* Query SQL Server for the login of the user accessing the
database. */
$tsql = "SELECT CONVERT(varchar(32), SUSER_SNAME())";
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false )
{
echo "Error in executing query.</br>";
die( print_r( sqlsrv_errors(), true));
}
/* Retrieve and display the results of the query. */
$row = sqlsrv_fetch_array($stmt);
echo "User login: ".$row[0]."</br>";
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
另請參閱
工作
概念
其他資源
程式設計指南
如何:建立 SQL Server 登入
如何:建立資料庫使用者
管理使用者、角色和登入
使用者結構描述分隔
GRANT 物件權限 (Transact-SQL)