4 データベース接続の設定
4.4 データベース接続の詳細設定
4.4.1 アプリケーション セキュリティ
典型的なPowerBuilder アプリケーションでは、スクリプト記述のセキュリティおよ
びデータベース セキュリティの2つの方法でセキュリティを実装します。Appeon シ ステムは、PowerBuilder アプリケーション セキュリティの最上位として、変換後の
Webアプリケーションに対して組み込みのセキュリティレイヤーを提供します。こ
のAppeon セキュリティでは、Appeon ユーザ/グループ管理システムを使用してユー
ザが Webアプリケーションへアクセスできるか否かを設定できます。
Appeon Webアプリケーションには、多くの方法でセキュリティを実装できます。
PowerBuilder アプリケーションのスクリプトに記述されたセキュリティは、直接、
Web に変換され、Web アプリケーションのセキュリティとしても機能します。また、
データベースセキュリティをWebアプリケーションに実装する方法もあります。
PowerBuilder アプリケーションのスクリプト記述のセキュリティと共に使用するた
め、Appeon ユーザ/グループ管理システムを組み込む方法については、セクション
4.4.2.a 「Appeon セキュリティの組み込み」を参照してください。また、Webテクノ
ロジーを使用して独自のセキュリティを実行することもできます。
4.4.1.a データベース セキュリティ
PowerBuilder アプリケーションは、ユーザのログインに応じてトランザクションオ
ブジェクトのプロパティ(ユーザ ID とパスワードなど)を動的に変更でき、データ ベーステーブルの読み込みまたは変更を行うユーザ権限でデータベースに接続でき ます。
Webアプリケーションでは、データベースサーバとの対話はEAServerのJDBC コ ネクションキャッシュにゆだねられます。Webアプリケーションは、アプリケーシ ョンのソースコード内でトランザクションオブジェクトのDBMS および DBParmプ ロパティを設定または変更することによって、トランザクションオブジェクトとコ ネクションキャッシュのマッピングを動的に設定または変更するか、または、AEM 内でそれらを静的に設定できます。コネクションキャッシュの構成には、EAServer 内でユーザIDとパスワードをあらかじめ構成しなければならないという制約があり ます。この制約により、オリジナルアプリケーションのデータベースセキュリティ をより良くマイグレートするには、このセクションで紹介する対応策を検討する必 要があります。
対応策1: コネクション キャッシュの定義
この対応策としては、データベースのユーザIDとパスワードに応じて、異なるアク セスレベル数に相当する数のコネクションキャッシュをアプリケーションであらか じめ定義します。アプリケーションでは、ユーザがログインしたとき、データベー ス接続を確立するためにどのトランザクションオブジェクトとコネクションキャッ シュをマッピングするかを決定します。
EAServer では、データベース接続における権限の数と等しい数のコネクションキャ ッシュを設定し、トランザクション オブジェクトの DBParmプロパティを使用して、
コネクションキャッシュを動的にマップします。トランザクションオブジェクトと コネクションキャッシュのマッピングは、アプリケーションのソースコード内でト ランザクションオブジェクトのDBMS および DBParmプロパティを設定または変更 することによって動的に設定または変更できます。より詳細については、セクショ
ン4.3.1「トランザクションオブジェクトとコネクションキャッシュの動的なマッ
ピング」を参照してください。
対応策2: 分散アプリケーション テクニック
Appeonによってサポートされている分散アプリケーションテクニックは、
PowerBuilder アプリケーション内のデータベースセキュリティ機能への対応策とし
ても使用できます。この方法では、データベースセキュリティを実装している
PowerBuilder ソースコードをNVOにカプセル化して、それらをEAServer 上で実行
します。このNVO では、通常、データベース接続(トランザクションオブジェク トのプロパティの操作)、データストアオブジェクトの操作またはSQLの実行、お よびクライアントへのリターン情報の転送のような処理を行います。
たとえば、ユーザ認証ロジックをNVOにカプセル化して、このNVO をEAServer に配布します。アプリケーションでは、ユーザ名とパスワードをログインウィンド ウからNVOに受け渡すソースコードを記述するのみです。
ステップ1 - NVOを作成してユーザ認証のメソッドを宣言します。このメソッドは、
ログインウィンドウから渡されたユーザ情報とシステムテーブルから検索した情報 を比較します。
NVOに定義するメソッド:
public function boolean of_checkuser (string as_userid, string as_password);
String ls_DBPass SELECT fpassword
INTO :ls_DBPass FROM t_user
WHERE t_user.fuserno = :as_userid;
If sqlca.SQLCode <> 0 Then Return false
End If
If ls_DBPass <> as_password Then Return false
End If Return true End function
ステップ2 - NVOを EAServerに配布します。クライアント アプリケーションでは
このNVOのプロキシ オブジェクトを作成します。
ステップ3 - クライアント アプリケーション内のユーザ認証ロジックを変更して、
ログイン ウィンドウから取得したユーザ情報をNVOに渡すようにします。
クライアント アプリケーションのスクリプトの修正:
String ls_User,ls_Pass,ls_DBPass,ls_Err Long ll_ID
String ls_Mess = 'Please enter a valid user ID/password.' If Trim(sle_name.Text) = '' Then
sle_name.SetFocus()
MessageBox('Login Not Valid',ls_Mess,exclamation!) Return
End if
ls_User = Trim(sle_name.Text) ls_Pass = Trim(sle_Pass.Text)
If i_logsec.of_checkuser(ls_User,ls_Pass) then
MessageBox("Infomation","Login successful!") Else
MessageBox("Infomation","Login failure!") End if
4.4.1.b INI ファイルの使用による接続セキュリティの設定
PowerBuilder アプリケーションでは、アプリケーションのスクリプト内でプロパテ
ィに値をアサインするか、Profile関数を使用して初期化ファイル(INI)から値を読 み込むことによって接続プロパティを設定できます。環境が次に示すリクワイアメ
ントに適合する場合、Appeonでは、INIファイルから接続プロパティを設定するこ とを推奨します。
アプリケーションにアクセスするブラウザのクッキーを有効にする
理由:INIファイルを使用するアプリケーションが配布されるとき、Appeon Developer はINIファイルをXMLとしてAppeon Serverに配布します。クライ アントが配布されたアプリケーションにアクセスすると、このXML ファイ ルのコピーが特別に作成され、すべてのプロファイル情報をクライアントに 運びます。クライアントブラウザ上のクッキーは、クライアントがXML フ ァイルのコピーを正しく読み込むことを可能にします。
アプリケーションにアクセスするため、クライアント上のWindowsユーザア カウントプロファイルが1ユーザのみによって使用されるようにする。
理由:クッキーは、Windowsユーザプロファイルのcookiesディレクトリ
(たとえば、C:\Documents and Settings\Administrator\Cookies)に存在し、クラ イアントマシンを使用するどんなユーザでも、フルアクセス権限で他のユー ザのWebアプリケーションの識別情報にアクセスができます。
クライアント上で、同じWindowsユーザアカウントプロファイルを複数のユーザ が使用できる場合、セクション4.4.1.a 「データベースセキュリティ」で紹介する他 のセキュリティ方法、データベースセキュリティの使用を考慮します。
INIファイルは、たとえばPB、Application、および Databaseなど複数のセクション から構成されます。次に「Database」セクションを示します:
[Database]
変数と値 ...
次に示すスクリプトの例は、接続プロパティの値をスクリプトで直接SQLCA にア サインしています。データベース接続情報はアプリケーションの配布後にWebサー バに保存されるため、いくつかのネットワーク構成においてデータベースサーバの 安全性に不安を残します。
SQLCA.DBMS = "MSS Microsoft SQL Server"
SQLCA.Database = "appeon_test"
SQLCA.ServerName = "192.0.0.246"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False ...
次に示すスクリプトの例では、データベース接続のため、初期化ファイルApp.INI から値を読み込んでトランザクションオブジェクトに設定しています。この方法は 前述のスクリプトと比較してより高い安全性があります。
sqlca.DBMS = ProfileString(App.INI, "database",&
"dbms", "")
sqlca.database = ProfileString(App.INI,&
"database", "database", "")
sqlca.userid = ProfileString(App.INI, "database",&
"userid", "")
sqlca.dbpass = ProfileString(App.INI, "database",&
"dbpass", "") ...