SQL Server 認証を使用して接続する方法
SQL Server Driver for PHP は、SQL Server 接続時の SQL Server 認証をサポートしています。
SQL Server 認証は、Windows 認証を使用できない場合にのみ使用してください。Windows 認証を使用した接続については、「Windows 認証を使用して接続する方法」を参照してください。
SQL Server 認証を使用して SQL Server に接続する場合、次の点を考慮する必要があります。
- サーバー上で SQL Server 混合モード認証を有効にする必要があります。
- 接続確立の試行時に、UID および PWD の接続属性が設定されている必要があります。UID と PWD は、有効な 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 アカウントを使用しないようにします。適切な特権を持つデータベース ユーザーにアプリケーションをマップし、強力なパスワードを使用してください。
注意
接続を確立するときに、UID や PWD 以外の接続属性も設定できます。サポートされる接続属性の完全な一覧については、「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);
?>
参照
処理手順
概念
その他のリソース
プログラミング ガイド
SUSER_SNAME (Transact-SQL)
SQL Server ログインを作成する方法
データベース ユーザーを作成する方法
ユーザー、ロール、およびログインの管理
ユーザーとスキーマの分離
GRANT (オブジェクトの権限の許可) (Transact-SQL)