方法:Windows 認証を使用した接続
Microsoft SQL Server 用 Drivers for PHP の既定では、Windows 認証を使用して SQL Server に接続します。 つまり、サーバーに接続するときに、ほとんどのシナリオでエンドユーザーの ID ではなく、Web サーバーのプロセス ID またはスレッド ID (Web サーバーが権限の借用を使用している場合) が使用されるという点が重要です。
Windows 認証を使用して SQL Server に接続する場合は、次の点を考慮する必要があります。
接続を確立するには、Web サーバーのプロセス (またはスレッド) を実行する資格情報と、有効な SQL Server ログインが対応付けられている必要があります。
SQL Server と Web サーバーが別のコンピューター上にある場合、リモート接続を有効にするように SQL Server を構成する必要があります。
Note
接続を確立するときに、 Database や ConnectionPooling などの接続属性を設定できます。 サポートされている接続属性の一覧については、「 Connection Options」を参照してください。
次の理由のために可能な場合は、SQL Server への接続に Windows 認証を使用する必要があります。
認証時にネットワーク経由で資格情報が渡されることはありません。ユーザー名とパスワードはデータベース接続文字列に埋め込まれません。 これは、悪意のあるユーザーや攻撃者が、ネットワークを監視したり、構成ファイル内の接続文字列を表示したりして、資格情報を取得できないことを意味します。
ユーザーは、アカウントを一元管理されます。また、パスワードの有効期限、パスワードの最小の長さ、および複数の無効なログイン要求後のアカウント ロックアウトなど、セキュリティ ポリシーが強制されます。
Windows 認証を使用できない場合、「方法: SQL Server 認証を使用して接続する」を参照してください。
SQLSRV の例
次の例では、Windows 認証で Microsoft SQL Server 用 Drivers for PHPの SQLSRV ドライバーを使用して、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);
?>
PDO_SQLSRV の例
次の例では、PDO_SQLSRV ドライバーを使用して前のサンプルと同じタスクを実行します。
<?php
try {
$conn = new PDO( "sqlsrv:Server=(local);Database=AdventureWorks", NULL, NULL);
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch( PDOException $e ) {
die( "Error connecting to SQL Server" );
}
echo "Connected to SQL Server\n";
$query = 'select * from Person.ContactType';
$stmt = $conn->query( $query );
while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ){
print_r( $row );
}
?>