![見出し画像](https://assets.st-note.com/production/uploads/images/76423123/rectangle_large_type_2_5fb69418ccdfe82f93d0b025bdd23df0.png?width=1200)
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
に接続します。
![](https://assets.st-note.com/img/1649926108847-gzSdwaZjFj.png?width=1200)
よくあるマニュアルに従って、ユーザーを追記しても良いですが、なぜ登録するのかが分かったほうが楽しいですよね?
IISからの接続ユーザーは【IIS APPPOOL\DefaultAppPool】となります。
(変更可能ですので久々に確認する方はログインを試みているユーザー名を確認してくださいね)
【Microsoft SQL Server Management Studio 18】を起動します。
![](https://assets.st-note.com/img/1649926758852-2YvDeC7378.png)
【セキュリティ】⇒【ログイン】を右クリックして【新しいログイン】を押下します。
![](https://assets.st-note.com/img/1649927160383-kIfkhJcBMa.png?width=1200)
ログイン名:【IIS APPPOOL\DefaultAppPool】
Windows認証を選択
既定のデータベース:【今回使用するデータベース】
![](https://assets.st-note.com/img/1649927396650-L1cRGZqB9s.png?width=1200)
ユーザーマッピングを選択します。
(上部)対象のデータベースにチェックを入れます。
(下部)権限を付与します。※今回は[db_owner]にチェック
【OK】を押下して、設定を保存します。
再度、http://localhost/db_check.php
に接続します。
![](https://assets.st-note.com/img/1649927569844-eHsomhxm7V.png?width=1200)
SQL Server認証を使う方法
SQL Serverのセットアップ時には【Windows認証】のみとしていたので、設定を変更します。
![](https://assets.st-note.com/img/1650602610035-RsKuYUSxYf.png)
SQL Server本体を右クリックし【プロパティ】を押下します。
![](https://assets.st-note.com/img/1650602728765-T949uSxu54.png?width=1200)
サーバー認証を【Windows認証モード】から【SQL認証モードとWindows認証モード】に変更し【OK】を押下します。
![](https://assets.st-note.com/img/1650602835111-uJhhFH1v76.png)
再起動を促すメッセージがありますので、再起動を行います。
![](https://assets.st-note.com/img/1650602846645-8pp8VXC1SX.png)
![](https://assets.st-note.com/img/1650602896275-sHj6yi4Tlo.png)
![](https://assets.st-note.com/img/1650602907440-UYAxwIuUuh.png)
再起動が完了後
先の【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】としてみました。
![](https://assets.st-note.com/img/1649931856214-dfvzpDjLC5.png?width=1200)
ログイン名:【XXXX_Admin】
SQL Server認証を選択
パスワード:【Admin_P@ssw0rd】
【パスワードポリシーを適用する】のチェックを外す。
既定のデータベース:【今回使用するデータベース】
![](https://assets.st-note.com/img/1649931984699-18Yy9PVuJn.png?width=1200)
ユーザーマッピングを選択します。
(上部)対象のデータベースにチェックを入れます。
(下部)権限を付与します。※今回は[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 構成マネージャー】を起動します。
![](https://assets.st-note.com/img/1649933241243-U8jaNBsouP.png?width=1200)
【SQL Server ネットワークの構成】⇒【SQLEXPRESSのプロトコル】
(右側)【TCP/IP】のプロパティを開きます。
![](https://assets.st-note.com/img/1649932941724-CtmiypgVdv.png)
【プロトコル】タブの有効を【いいえ】⇒【はい】に変更します。
![](https://assets.st-note.com/img/1649933397509-sc9AoCqIZA.png)
【IPアドレス】タブの末尾にある【IPAll】のTCPポートに【1433】を登録します。(セキュリティ対策の為変更してもOKです)
【OK】を押下して、設定を保存します。
![](https://assets.st-note.com/img/1649933556891-264ha7cIBu.png)
保存したときに【警告】がでますので、確認してください。
※タイトルは警告ですが、アイコンはインフォメーションです。
警告に従って、SQL Serverを再起動します。
再度、http://localhost/db_check.php
に接続して、接続できれば成功です!
これで【IIS+PHP+SQL Server】は終了です。
ご不明点・記載ミスなどありましたら、筆者までご連絡ください。
この記事が気に入ったらサポートをしてみませんか?