見出し画像

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】は終了です。
ご不明点・記載ミスなどありましたら、筆者までご連絡ください。

この記事が気に入ったらサポートをしてみませんか?