共用方式為


如何:使用 SQL Server 驗證進行連接

SQL Server Driver for PHP 在您連接到 SQL Server 時可支援 SQL Server 驗證。

只有當無法進行 Windows 驗證時,才應該使用 SQL Server 驗證。如需有關使用 Windows 驗證進行連接的詳細資訊,請參閱<如何:使用 Windows 驗證進行連接>。

當您使用 SQL Server 驗證連接 SQL Server 時,必須考量以下要點:

  • 必須在伺服器上啟用 SQL Server 混合模式驗證。
  • 當您嘗試建立連接時,必須設定 UIDPWD 連接屬性。UIDPWD 必須對應到有效的 SQL Server 使用者和密碼。

注意

包含右大括號 (}) 的密碼必須以第二個右大括號逸出。例如,如果 SQL Server 密碼是 "pass}word",PWD 連接屬性的值必須設定為 "pass}}word"。

當您使用 SQL Server 驗證連接 SQL Server 時,應該採取以下預防措施:

  • 保護 (加密) 從 Web 伺服器透過網路傳送給資料庫的認證。SQL Server 2005 和 SQL Server 2008 預設會加密認證。如果要增加安全性,請將 Encrypt 連接屬性設定為 "on",以便將傳送給伺服器的所有資料加密。

注意

將 Encrypt 連接屬性設定為 "on" 會降低效能,因為資料加密需要密集運算。

  • 請勿將純文字格式的連接屬性 UIDPWD 的值包含在 PHP 指令碼中。這些值應該儲存在應用程式特有的目錄中,並適當地限制該目錄的權限。
  • 請避免使用 sa 帳戶。將應用程式對應到具有所需權限的資料庫使用者,並使用增強式密碼。

注意

當您建立連接時,可以設定 UIDPWD 以外的連接屬性。如需支援之連接屬性的完整清單,請參閱<sqlsrv_connect>。

範例

下列範例使用 SQL Server 驗證來連接 SQL Server 的本機執行個體。必要 UIDPWD 連接屬性的值是取自應用程式特有的文字檔 uid.txtpwd.txt (位於 C:\AppData 目錄)。在建立連接之後,將會查詢伺服器來驗證使用者登入。

此範例假設 SQL Server 和 AdventureWorks 資料庫已經安裝在本機電腦上。當從瀏覽器執行此範例時,所有輸出都會寫入瀏覽器。

<?php
/* Specify the server and connection string attributes. */
$serverName = "(local)";

/* Get UID and PWD from application-specific files.  */
$uid = file_get_contents("C:\AppData\uid.txt");
$pwd = file_get_contents("C:\AppData\pwd.txt");
$connectionInfo = array( "UID"=>$uid,
                         "PWD"=>$pwd,
                         "Database"=>"AdventureWorks");

/* Connect using SQL Server 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 驗證進行連接

概念

有關文件集中的程式碼範例

其他資源

程式設計指南
SUSER_SNAME (Transact-SQL)
如何:建立 SQL Server 登入
如何:建立資料庫使用者
管理使用者、角色和登入
使用者結構描述分隔
GRANT 物件權限 (Transact-SQL)