SQL Server 認証を使用して接続する方法

SQL Server Driver for PHP は、SQL Server 接続時の SQL Server 認証をサポートしています。

SQL Server 認証は、Windows 認証を使用できない場合にのみ使用してください。Windows 認証を使用した接続については、「Windows 認証を使用して接続する方法」を参照してください。

SQL Server 認証を使用して SQL Server に接続する場合、次の点を考慮する必要があります。

  • サーバー上で SQL Server 混合モード認証を有効にする必要があります。
  • 接続確立の試行時に、UID および PWD の接続属性が設定されている必要があります。UIDPWD は、有効な SQL Server ユーザーとパスワードにマップされる必要があります。

注意

パスワードに右中かっこ (}) が含まれる場合、もう 1 つの右中かっこでエスケープする必要があります。たとえば SQL Server パスワードが "pass}word" の場合、PWD 接続属性には値 "pass}}word" を設定する必要があります。

SQL Server 認証を使用して SQL Server に接続する場合、次の予防策を実施する必要があります。

  • Web サーバーからデータベースにネットワーク経由で渡される資格情報を保護 (暗号化) します。SQL Server 2005 および SQL Server 2008 では、既定で資格情報が暗号化されます。セキュリティをさらに強化するには、Encrypt 接続属性を "on" に設定して、サーバーに送信されるすべてのデータを暗号化します。

注意

データの暗号化によってコンピュータに負荷がかかるため、Encrypt 接続属性を "on" に設定するとパフォーマンスが低下する可能性があります。

  • UID および PWD の接続属性値は、PHP スクリプトにプレーン テキストとして含めないようにします。これらの値は、権限が適切に制限された、アプリケーション固有のディレクトリに格納してください。
  • sa アカウントを使用しないようにします。適切な特権を持つデータベース ユーザーにアプリケーションをマップし、強力なパスワードを使用してください。

注意

接続を確立するときに、UIDPWD 以外の接続属性も設定できます。サポートされる接続属性の完全な一覧については、「sqlsrv_connect」を参照してください。

次の例では、SQL Server 認証を使用して SQL Server のローカル インスタンスに接続します。UID および PWD の必須接続属性の値は、C:\AppData ディレクトリにあるアプリケーション固有のテキスト ファイル (uid.txt および pwd.txt) から取得されます。接続の確立後、サーバーにクエリを実行してユーザー ログインを確認します。

この例では、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)