この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

お詫びと訂正

 前回ダウンロードできる形にして置いておいたbusinesslogic.lzhをに含まれるBusinessSample.MSIファイルはCOMアプリケーションのインストーラとなっているが,パッケージを作成する際,誤って,[アクセスの権限]にチェックを付けるのを忘れてしまった。そのため,このままの状態だと,COM+のセキュリティは有効になっていない。COM+のセキュリティを有効にするため,BusinessSample.MSIファイルをダブルクリックしてBusinessSampleアプリケーションをインストールしたのち,[コンポーネントサービス]管理ツールを使ってBusinessSample.MSIファイルのプロパティを開き,[セキュリティ]ページにある[このアプリケーションへのアクセスチェックを行う]にチェックを付けてほしい。

fig7_0a

 ところで,話は変わってCOM+のセキュリティであるが,一部挙動がおかしいこと分かってきた。

 COM+では,アプリケーション単位,COMコンポーネント単位,COMインタフェース単位,COMインタフェースに備わるメソッド単位で,どのロールに属するユーザーが利用できるかを決めることができるわけだが,COMインタフェース単位,COMメソッド単位でセキュリティの設定をしたときに,状況によってオートメーションエラーが発生することが分かった。

 これは,COMコンポーネントには操作権限を与えずに,そのCOMコンポーネントのインタフェースやメソッドのみに操作権限を与え,かつ,そのCOMコンポーネントのメソッドがErr.Raiseメソッドを用いるなどして実行時エラーを発生した場合に,COMクライアント側にCOMコンポーネントが発生したエラーメッセージではなくオートメーションエラーのメッセージが返るというものである。このときイベントログを参照すると,セキュリティによる権限のエラーログが残っているため,セキュリティ関連の問題であると思われる。

 前回構築したBusinessSampleアプリケーションでは,AllAdminロールに属するユーザーはBusiness.*コンポーネントに対する権限を付与したのに対し,それ以外のロールについてはBusiness.*コンポーネントに対しては権限を与えず,コンポーネントに備わる個々のメソッドに対しての権限の付与をした。そのため,AllAdminロールに属さないユーザーがBusiness.*コンポーネントのメソッドを呼び出し,かつ,そのメソッドが実行時エラーを返すときには,メソッドがErr.Raiseメソッドで返したエラーではなくオートメーションエラーが戻ることになってしまい,COMクライアント側がBusiness.*コンポーネントで発生させたエラーメッセージを取得できなくなる。

 この問題はCOM+の不具合であるのか仕様であるのかは定かではない。原因が分かり次第,追って詳細を報告する予定である。

prevpg.gif Chapter 7 3/65 nextpg.gif