見出し画像

IISと連携したPHPからIBM Db2 Community Editionへの接続(完結編)

上記により準備されたデータベースに接続を行います。

データベース接続ファイルの準備

http://localhost/db_check_odbc.php
or
http://【IPアドレス】/db_check_odbc.php
として接続するファイルを作成します。同じファイルでOKです。
予期せぬ動作をした場合、IISのサーバー(ローカル環境)上で試みるとわかりやすいエラーが表示されることもあります。

<?php
	//Error Output
	ini_set('display_errors', "On");

	//一時的な文字コードセットの変更
	ini_set("default_charset", "SJIS");

	$DatabaseName = "TESTDB";
	$UserName = "Administrator";
	$PassPhrase = "P@ssw0rd";

	$ServerName = "odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=localhost;PORT=25000;DATABASE=" .$DatabaseName. ";PROTOCOL=TCPIP;";

	try {
		$DB_INFO = new PDO($ServerName, $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 ODBC_DSN [" .$e->getMessage(). "]");
	}

	echo "Connected to ODBC_DSN";

	//データベース情報切断
	$DB_INFO = null;
?>

データベースへの接続

コマンドプロンプトを使った接続

コマンドプロンプトで行う理由はIISの設定に不具合があることに気が付かず数時間悩み続ける人(←作者)が少しでも減れば・・・という思いからです。

管理者モードでコマンドプロンプトを起動します。
※Power Shellの場合はcmdと入力してコマンドプロンプトにしてください。

//PHPの起動プログラムがある場所に移動します。
> cd c:\PHP-NTS\8.1

//データベース接続ファイルを実行します。
> php c:\IIS\SITE\DefaultPage\db_check_odbc.php
Connect to ODBC_DNS
>
と表示されれば成功です。

Webを使った接続(成功への道筋)

では、同ファイルをブラウザから呼び出してみましょう。

[SQLSTATE[08004] SQLDriverConnect: -1092 [IBM][CLI Driver] SQL1092N このユーザー ID には要求されたコマンドまたは操作を実行する権限がないため、要求されたコマンドまたは操作が失敗しました。 ユーザー ID: "DEFAULTAPPPOOL"。 ]

[DEFAULTAPPPOOL]に権限が無いという理由で接続に失敗しました。
GUIの【ODBC データ ソース (64 ビット)】で作成したものを呼び出しても結果は同じです。
なお【SQL Server】ドライバを呼び出すと成功します。
実は先に記述した【IISと連携したPHPからSQL Serverへの接続(完結編)】でも気にはなっていたのですが、[DEFAULTAPPPOOL]って誰?

Webを使った接続(完結)

【インターネット インフォメーション サービス(IIS)マネージャー】を起動します。
(左側)アプリケーションプールを選択します。
【DefaultAppPool】を右クリックして【詳細設定】を選択します。

【プロセス モデル】⇒ID【ApplicationPoolIndentity】を変更します。

ビルトイン アカウントから選択するのが楽です。一番制限が強そうな【LocalService】を選択します。

ローカル システム:高い特権を持ち、ネットワーク リソースにもアクセスできる信頼できるアカウント。
ネットワーク サービス:標準の最小特権サービスの実行に使用される制限付きまたは制限付きサービス アカウント。 このアカウントには、ローカル システム アカウントよりも少ない権限があります。 このアカウントには、ネットワーク リソースへのアクセス権があります。
ローカル サービス:ネットワーク サービスに似た制限付きまたは制限付きサービス アカウントで、標準の最小特権サービスを実行することを目的とします。 このアカウントは、ネットワーク リソースにアクセスできません。

https://docs.microsoft.com/ja-jp/troubleshoot/developer/webapps/iis/www-authentication-authorization/understanding-identities

http://localhost/db_check_odbc.php
に再接続します。

無事に接続が成功しました。
※エラーが出た場合は、Windows Serverを再起動してみるとよいかもしれません。

余談ですが[DEFAULTAPPPOOL]に権限を付与するのもOKです。というか王道である気もしますが、また次回(あるかは不明)ということでご容赦ください。

これで【IIS+PHP+IBM Db2】は終了です。
ご不明点・記載ミスなどありましたら、筆者までご連絡ください。

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