目次 | |

14. セキュリティのサポート

エンタプライズJavaBeans体系によって,セキュリティ管理実装義務のほとんどがエンタプライズBeanからEJBコンテナ及びEJBサーバにシフトできる。

エンタプライズJavaBeansでのセキュリティに対するサポートには次の部品が包含される。

14.1以降でセキュリティのサポートをより詳細に記述する。

14.1 パッケージjava.security

パッケージjava.securityは,包括的なJavaプログラム言語セキュリティ関連インタフェースを提供する。エンタプライズJavaBeans体系は,現存のJavaプログラム言語で利用可能なセキュリティAPIを使用する。

より限定していえば,エンタプライズJavaBeans体系はAPIとしてクラスjava.security.Identityを使用して,セキュリティを目的としたユーザ識別性を記述する。java.security.Identityのインスタンスは,固有のユーザ又はセキュリティの役割を記述できる。

クラスjava.security.Identityの記述に関しては,JDK参照ページを参照のこと。

EJBコンテナは,クラスjava.security.Identityのインスタンスをユーザアカウント及び/又はEJBサーバの役割(つまり,使用中のプラットフォームによって定義され管理されるユーザアカウント及び役割)にマッピングする責任をもつ。このマッピングはプラットフォーム固有の方法で実行される。

14.2 EJBContextのセキュリティ関連メソッド

エンタプライズJavaBeans APIによって,エンタプライズBeanインスタンスは現メソッドを呼び出したクライアントの識別性を獲得できる。このために,インタフェースjavax.ejb.EJBContextには次のメソッドが包含される。 前述のメソッドの記述に関しては,javax.ejb.EJBContextの参照ページを参照のこと。

エンタプライズBeanインスタンスが現メソッドを呼び出したクライアントの識別性を獲得するための方法を次の例によって示す。

/* Obtain the security identity of the client. */
Identity caller = EJBContext.getCallerIdentity();

/* getName returns a printable representation of identity.*/
String clientAccount = caller.getName();
エンタプライズBeanインスタンスが,メソッドの呼出し者に指定されたセキュリティの役割があるかどうかをテストするための方法を次の例によって示す。
/*
* Check if the client has the "vip-account"role
*/
Identity vipAccount = new Identity("vip-account");

if (EJBContext.isCallerInRole(vipAccount)) {
        do something;
}else{
        do something else;
}

14.3 セキュリティ関連配置記述子特性

14.3では,ejb-jarファイルの配置記述子において渡された宣言セキュリティ情報を記述する。この情報は,エンタプライズBean提供者が設定し,配置時にコンテナツールが読み取り,解釈する。

14.3.1 アクセス制御エントリ

エンタプライズBeanの配置記述子は,アクセス制御エントリを含む。アクセス制御エントリによって,コンテナはエンタプライズBean側の実行時セキュリティ管理を実行することができる。

エンタプライズBean記述子によって,Bean提供者は,各メソッド及び/又は全体Beanに対応するAccessControlEntryを指定することができる。AccessControlEntryが全体Beanに関して指定される場合,AccessControlEntryは,個々のAccessControlEntryをもたないメソッドすべてに適用される。

AccessControlEntryは,メソッドと型java.security.Identityのエントリのリストとを関連づける。これらのセキュリティ識別性は,メソッドを呼び出すことができるユーザ又は役割である。

コンテナは配置時に,配置記述子からAccessControlEntriesをインポートし,実行時に実行する。通常は,コンテナによって配置者及びシステム管理者がコンテナ提供ツールを使用して,AccessControlEntriesを変更できる。

14.3.2 RunAsMode及びRunAsIdentity

エンタプライズBeanの配置記述子によって,Bean提供者は,エンタプライズBeanのメソッドの実行と関連づけられるセキュリティ識別性を指定できる。実行時,エンタプライズBeanのインスタンスが,データベースアクセス呼出しなどの使用中の資源管理者へ呼出しを行うか,又は別のエンタプライズBeanを呼び出す場合,このセキュリティ識別性は呼出しと関連づけられる。

識別性はセキュリティ識別性“RunAs”として表示される。
“RunAs”には次の二つがある。

EJBコンテナは,プラットフォーム固有の方法で,SYSTEM_IDENTITYを使用中のプラットフォームの特権的アカウントにマップする。

配置記述子によって,Bean提供者は全体Beanのレベル又は各メソッドのレベルでセキュリティ識別性RunAsを指定できる。Beanレベルで指定された値は,メソッドレベルのセキュリティ識別性に指定させないすべてのメソッドに適用される。

メソッドレベルのセキュリティ識別性RunAsは,同一Beanの異なるメソッドごとに異なってもよいが,使用にあたっては次の制約を守らなければならない。

Bean提供者及びアプリケーション組立て者は,この制約を守らなければならない。規則違反を検出したEJBコンテナは,クライアントにjava.rmi.RemoteExceptionを投げ,エラーを記録しシステム管理者に知らせなければならない。


目次 | |