IISと連携したPHPからSQL Serverへの接続(完結編)
SQL Serverの設定によって、接続方法がかわります。
まずは、Windows認証です。一般的にはActiveDirectory配下で作っているSQL ServerとIISにおいて認証させる方法です。
つづいて、SQL Server認証です。古くから使っている認証方式です。【sa】ユーザーをご存じの方も多いのではないでしょうか。このSQL Server認証ではTCPIP接続を許可することにより、広く汎用的に使用することも可能です。どの接続方法が良いかと言う議論はいたしませんので、どのパターンでも柔軟に選択できればよいかと思います。
上記により準備されたデータベースに接続を行います。
データベース接続ファイルの準備
http://localhost/db_check.php
or
http://【IPアドレス】/db_check.php
として接続するファイルを作成します。同じファイルでOKです。
予期せぬ動作をした場合、IISのサーバー(ローカル環境)上で試みるとわかりやすいエラーが表示されることもあります。
<?php
$DatabaseName = "【データベース名】";
//認証方式に合わせたサーバー設定
//Windows認証 or SQL Server認証
//1st Check
$ServerName = "(local)\SQLEXPRESS";
//$ServerName = "【YourServerName】\SQLEXPRESS"; //Sample Code
//SQL Server認証 and TCPIP接続
//3rd Check TCPIP経由でSQL Server認証のチェック
//$ServerName = "127.0.0.1,1433";
//$ServerName = "127.0.0.1"; //Port1433は省略可能
$UserName = null; //Windows認証の固定値
$PassPhrase = null; //Windows認証の固定値
//2nd Check ユーザー名をNullから変更するとSQL Server認証のチェックが可能
// $UserName = "【SQL Server認証】";
// $PassPhrase = "【SQL Server認証】";
try {
$DB_INFO = new PDO("sqlsrv:Server=" .$ServerName. ";Database=" .$DatabaseName, $UserName, $PassPhrase);
$DB_INFO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$DB_INFO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e) {
die("Error connecting to SQL Server[" .$e->getMessage(). "]");
}
echo "Connected to SQL Server";
//データベース情報切断
$DB_INFO = null;
?>
前提として、
$DatabaseName = "【データベース名】";
を正しい値にしてください。
データベースへの接続
Windows認証を使う方法
当サイトでは、IIS・SQL Serverは同一サーバーで作成しております。小型のプロジェクトであれば十分な環境だと思います。このような小規模な環境でActiveDirectoryでユーザー管理をするのか?という点については【No】だと思っています。がそれような環境下でもWindows認証は利用可能ですので、まずはやってみましょう。
http://localhost/db_check.php
に接続します。
よくあるマニュアルに従って、ユーザーを追記しても良いですが、なぜ登録するのかが分かったほうが楽しいですよね?
IISからの接続ユーザーは【IIS APPPOOL\DefaultAppPool】となります。
(変更可能ですので久々に確認する方はログインを試みているユーザー名を確認してくださいね)
【Microsoft SQL Server Management Studio 18】を起動します。
【セキュリティ】⇒【ログイン】を右クリックして【新しいログイン】を押下します。
ログイン名:【IIS APPPOOL\DefaultAppPool】
Windows認証を選択
既定のデータベース:【今回使用するデータベース】
ユーザーマッピングを選択します。
(上部)対象のデータベースにチェックを入れます。
(下部)権限を付与します。※今回は[db_owner]にチェック
【OK】を押下して、設定を保存します。
再度、http://localhost/db_check.php
に接続します。
SQL Server認証を使う方法
SQL Serverのセットアップ時には【Windows認証】のみとしていたので、設定を変更します。
SQL Server本体を右クリックし【プロパティ】を押下します。
サーバー認証を【Windows認証モード】から【SQL認証モードとWindows認証モード】に変更し【OK】を押下します。
再起動を促すメッセージがありますので、再起動を行います。
再起動が完了後
先の【db_check.php】を編集します。
//2nd Check ユーザー名をNullから変更するとSQL Server認証のチェックが可能
// $UserName = "【SQL Server認証】";
// $PassPhrase = "【SQL Server認証】";
【UserName】と【PassPhrase】のコメントを削除して、値を上書きします。
※本番環境などは上書きではない設定にしましょう。
//2nd Check ユーザー名をNullから変更するとSQL Server認証のチェックが可能
$UserName = "XXXX_Admin";
$PassPhrase = "Admin_P@ssw0rd";
例では、ユーザー名が【XXXX_Admin】としてみました。
ログイン名:【XXXX_Admin】
SQL Server認証を選択
パスワード:【Admin_P@ssw0rd】
【パスワードポリシーを適用する】のチェックを外す。
既定のデータベース:【今回使用するデータベース】
ユーザーマッピングを選択します。
(上部)対象のデータベースにチェックを入れます。
(下部)権限を付与します。※今回は[db_datawriter]にチェック
【OK】を押下して、設定を保存します。
再度、http://localhost/db_check.php
に接続して、接続できれば成功です!
TCP/IP経由でSQL Server認証を使う方法
先の【db_check.php】を編集します。
//3rd Check TCPIP経由でSQL Server認証のチェック
//$ServerName = "127.0.0.1,1433";
//$ServerName = "127.0.0.1"; //Port1433は省略可能
ご存じだとは思いますが【127.0.0.1】はローカルホストを意味します。
IISとSQL Serverが同居しています。
ポート番号を省略したサーバ名のコメントを削除します。
//3rd Check TCPIP経由でSQL Server認証のチェック
//$ServerName = "127.0.0.1,1433";
$ServerName = "127.0.0.1"; //Port1433は省略可能
【SQL Server 2019 構成マネージャー】を起動します。
【SQL Server ネットワークの構成】⇒【SQLEXPRESSのプロトコル】
(右側)【TCP/IP】のプロパティを開きます。
【プロトコル】タブの有効を【いいえ】⇒【はい】に変更します。
【IPアドレス】タブの末尾にある【IPAll】のTCPポートに【1433】を登録します。(セキュリティ対策の為変更してもOKです)
【OK】を押下して、設定を保存します。
保存したときに【警告】がでますので、確認してください。
※タイトルは警告ですが、アイコンはインフォメーションです。
警告に従って、SQL Serverを再起動します。
再度、http://localhost/db_check.php
に接続して、接続できれば成功です!
これで【IIS+PHP+SQL Server】は終了です。
ご不明点・記載ミスなどありましたら、筆者までご連絡ください。
この記事が気に入ったらサポートをしてみませんか?