23 Oracle Enterprise Schedulerセキュリティ

この章では、リソースに対するアクセス制御およびジョブ実行に対するアプリケーション・アイデンティティ伝播を提供する、Oracle Enterprise Schedulerのセキュリティ機能について説明します。

この章の内容は次のとおりです。

23.1 Oracle Enterprise Schedulerセキュリティの概要

Oracle Enterprise Scheduler Securityでは、アプリケーション・アイデンティティの使用のためにMetadataServiceおよびサポートにおいて保護された操作が含まれます。

Oracle Enterprise Schedulerセキュリティには、次のことが含まれています。

  • MetadataServiceに対する保護された操作。MetadataPermissionによって保護され、これにより、メタデータのアクセス制御が行われます。メタデータ・オブジェクトに対するアクセス制御。権限を持つユーザーのみが、ジョブの作成、削除および更新と、メタデータのスケジュールを行うことができます。詳細は、「Oracle Enterprise Schedulerのメタデータ・アクセス制御」を参照してください。

  • アプリケーション・アイデンティティの使用のサポート。アプリケーション・アイデンティティを使用すると、発行元ユーザーに割り当てられている権限よりも高い権限を必要とするジョブを完了するために、権限を昇格できます。詳細は、「Oracle Enterprise Schedulerのジョブ実行のセキュリティ」を参照してください。

23.1.1 Oracle Enterprise Schedulerのメタデータ・アクセス制御

設計時に、メタデータ作成者は、どのジョブ機能がどのメタデータ・オブジェクトにアクセスできるかを決定する必要があります。これは、各メタデータ・オブジェクトを1つ以上のロールに関連付けて、各ロールに1つ以上のアクションを指定することによって表します。図23-1に、メタデータのセキュリティのサマリーを示します。

図23-1 Oracle Enterprise Schedulerのデザインタイム・メタデータのセキュリティ

図23-1の説明が続きます
「図23-1 Oracle Enterprise Schedulerのデザインタイム・メタデータのセキュリティ」の説明

23.1.2 Oracle Enterprise Schedulerのジョブ実行のセキュリティ

ジョブの発行中、ジョブ・リクエストを発行する権限を持つユーザーは、発行元ユーザーと呼ばれます。リクエストの実行時、すべてのユーザーのJavaコード(前処理、後処理、Javaジョブ、置換など)は、すべてのロールと資格証明が保持された状態で、発行元ユーザーとして実行されます。

ただし、ジョブ・メタデータにSYS_RUNAS_APPLICAITONIDを指定すると、ジョブは、昇格された権限のアプリケーションIDで実行されます。詳細は、「Oracle Enterprise Schedulerジョブに対する権限の昇格」を参照してください。

23.2 Oracle Enterprise Schedulerのメタデータのセキュリティの構成

ユーザーがRuntimeServiceまたはMetadataServiceを使用してOracle Enterprise Schedulerサービスにアクセスすると、ユーザーのアイデンティティが取得され、Oracle Enterprise Schedulerによって、リソース(メタデータ・オブジェクトなど)にアクセスするために必要な権限がこのユーザーにあるかどうかが確認されます。

たとえば、teller1という名前のユーザーがgetJobDefinitionをコールしてメタデータ・オブジェクトcalculateFeesにアクセスする必要がある場合、Oracle Enterprise Schedulerでは、オブジェクトを返す前に、メタデータ・オブジェクトcalculateFeesに対するREAD権限がteller1にあることを確認します。

設計時に、メタデータ作成者は、どのジョブ機能がどのメタデータ・オブジェクトにアクセスできるかを決定する必要があります。これは、各メタデータ・オブジェクトを1つ以上のロールに関連付けて、各ロールに1つ以上のアクションを指定することによって表します。

メタデータのロール割当てには、次の2つのオプションがあります。

  • Oracle JDeveloperツールのOracle ADF Securityウィザードの使用

  • Oracle JDeveloper Oracle Enterprise Schedulerのアドインであるメタデータ・ページの使用

Oracle JDeveloperのADFセキュリティ・ウィザードにより、使用するロールが作成されますが、ロールは、メタデータ・オブジェクトに登録する前に作成する必要があります。

23.2.1 Oracle ADF Securityウィザードを使用してアプリケーション・セキュリティを有効にする方法

これらのステップでは、Oracle Enterprise Schedulerを使用したアプリケーションに対する最小の検証されたセキュリティ設定について説明します。

次のステップに従って、作業用のjps-config.xmlおよび一部移入されたjazn-data.xmlを作成します。これらのステップを使用して、JPSで使用するサーブレットを構成します。

ADFセキュリティ・ウィザードを使用してセキュリティを有効にするには:

  1. Oracle JDeveloperでアプリケーションを開き、「アプリケーション」メニューから「保護」を選択します。
  2. ドロップダウン・リストから、「ADFセキュリティの構成」を選択します。「ADFセキュリティの構成」ウィザードが表示されます。
  3. 「ADFセキュリティの有効化」ページで、「ADF認証および認可」または「ADF認証」のいずれかを選択して、「次へ」をクリックします。
  4. 「認証タイプの選択」ページで、「HTTP Basic認証」または「フォームベース認証」のいずれかを選択して、「次へ」をクリックします。
  5. 「自動ポリシー付与の有効化」ページで、「ADF認証および認可」「フォームベース認証」を選択した場合、「自動付与の有効化」領域で適切なオプションを選択し、「次へ」をクリックします。
  6. 「認証されたようこそページを指定」で必要に応じてオプションを選択し、「次へ」をクリックします。
  7. 「サマリー」ページでオプションを検証して、「終了」をクリックします。
  8. 「セキュリティ・インフラストラクチャが作成されました」ダイアログで、「OK」をクリックします。

23.2.2 EARファイルへのセキュリティ・ファイルの包含

セキュリティを有効にしてjazn-data.xmlがアプリケーション・デプロイメントに含まれていることを確認するには、アプリケーションのEARファイルをアセンブル後、次のステップを実行します。

  1. Oracle JDeveloperで、「アプリケーション」「アプリケーションのプロパティ」を選択します。

  2. 「アプリケーションのプロパティ」ページのナビゲータで、「デプロイメント」を選択します。

  3. 「デプロイメント・プロファイル」領域で、EARファイルのデプロイメント・ディスクリプタを選択します。

  4. 「編集」をクリックします。これにより、「EARデプロイメント・プロファイルのプロパティの編集」ページが表示されます。

  5. 「EARデプロイメント・プロファイルのプロパティの編集」ページで、「ファイル・グループ」「アプリケーション・ディスクリプタ」「フィルタ」を展開します。

  6. 「フィルタ」領域で「ファイル」タブを選択します。

  7. ファイルjazn-data.xmljps-config.xmlおよびweblogic-application.xmlが、META-INFフォルダで選択されていることを確認します。

  8. 「OK」をクリックしてディスクリプタを保存します。

23.2.3 セキュリティのプリンシパルの定義方法

ロールは、Oracle Enterprise Schedulerセキュリティで使用する前に、定義する必要があります。定義できるロールには、次の2つのタイプがあります。

  • エンタープライズ・ロール: これらは、Oracle WebLogic Serverコンソール、WLSTスクリプト、またはOracle JDeveloperのADFセキュリティ・ウィザードを使用して、Oracle WebLogic Serverで直接定義します。

  • アプリケーション・ロール: これらはjazn-data.xmlファイルで定義するか、またはADFセキュリティ・ウィザードを使用して定義できます。

アプリケーション・ロールを作成するには:

  1. Oracle JDeveloperでアプリケーションを開き、「アプリケーション・ナビゲータ」で「アプリケーション・リソース」を展開します。
  2. 「アプリケーション・リソース」領域で、「ディスクリプタ」および「META-INF」を展開します。
  3. META-INFで、ダブルクリックしてjazn-data.xmlを開きます。
  4. jazn-data.xmlが表示されているページで、「アプリケーション・ロール」タブを選択します。「アプリケーション・ロール」タブが表示されない場合には、jazn-data.xmlを閉じてから再度開くようにしてください。
  5. 「ロール」リスト内の「追加」ボタンをクリックして、「新しいロールの追加」を選択します。
  6. 「名前」フィールドでEssApplicationRoleに名前を設定します。

    図23-2 アプリケーション・ロールの作成

    図23-2の説明が続きます
    「図23-2 アプリケーション・ロールの作成」の説明

23.2.4 エンタープライズ・ロールの作成

エンタープライズ・ロールを作成するには:

  1. Oracle JDeveloperでアプリケーションを開き、「アプリケーション・ナビゲータ」で「アプリケーション・リソース」を展開します。

  2. 「アプリケーション・リソース」領域で、「ディスクリプタ」および「META-INF」を展開します。

  3. META-INFで、ダブルクリックしてjazn-data.xmlを開きます。

  4. jazn-data.xmlが表示されているページで、「テスト・ユーザーとロール」タブを選択します。「テスト・ユーザーとロール」タブが表示されない場合には、jazn-data.xmlを閉じてから再度開くようにしてください。

  5. 「エンタープライズ・ロール」タブを選択します。

  6. 「ロール」リスト内の「追加」ボタンをクリックして、「新しいロールの追加」を選択します。

  7. 「名前」フィールドでEssEnterpriseRoleに名前を設定します。

    図23-3 エンタープライズ・ロールの作成

    図23-3の説明が続きます
    「図23-3 エンタープライズ・ロールの作成」の説明

23.2.5 Oracle Enterprise Schedulerのメタデータ・ページを使用した権限の作成方法

すべてのメタデータへのアクセスは、権限によって制御されています。適切なアイデンティティによるアクセスを確実にするには、適切な権限を与える必要があります。ほとんどのメタデータの権限付与は、Oracle Enterprise Scheduler Oracle JDeveloperのアドインを使用して行われると想定されています。

最初に、「ファイル」「新規」「ビジネス層」「エンタープライズ・スケジューラ・メタデータ」を使用して、必要な任意のOracle Enterprise Schedulerメタデータをアプリケーションに作成します。

Oracle JDeveloperを使用すると、セキュリティ権限をOracle Enterprise Schedulerのメタデータ・オブジェクトに追加できます。

Oracle Enterprise Schedulerのメタデータ・オブジェクトを保護するには:

  1. 任意のOracle Enterprise Schedulerのメタデータ・オブジェクトに対して「エディタ」ページを開きます。
  2. 「アクセス制御」領域で、「追加」をクリックして新規アクセス制御項目を追加します。
  3. 「アクセス制御の追加」ダイアログで、ドロップダウン・リストから「ロール」を選択します。これにより、アクセス権限を付与するロールが選択されます。
  4. リストの「読取り」「実行」「更新」または「削除」から1つ以上のアクションを選択します。
  5. 「OK」をクリックします。これにより、図23-4に示すように、更新されたロールが表示されます。
  6. 必要な数のロールに対して繰り返します。

図23-4 Oracle Enterprise Schedulerメタデータのセキュリティ・ロール

図23-4の説明が続きます
「図23-4 Oracle Enterprise Schedulerメタデータのセキュリティ・ロール」の説明

23.2.6 MetadataPermission APIについて

メタデータに対する権限付与は、クラスoracle.as.scheduler. security.MetadataPermissionに含まれています。権限の名前またはターゲットはパッケージ、メタデータ・オブジェクト・タイプおよび保護されているメタデータ・オブジェクトの名前に基づいており、この識別子はMetdataObjectId#toPermissionString()から取得できます。

表23-1に、付与に対するアクションを示します。表記法<Type>は、すべてのメタデータ・オブジェクト・タイプに対するプレースホルダです。たとえば、get<Type>()は、メソッドgetJobDefinition()getJobType()getJobSet()を参照しています。

表23-1 メタデータのセキュリティに対する付与アクション

アクション 適用 メタデータ関数

READ

None

get<Type>()、query<Type>()

EXECUTE

READ

submitRequest()

CREATE

READ

add<Type>()

UPDATE

READ

update<Type>()

DELETE

READ

delete<Type>()

非定型リクエストを発行する場合は、EXECUTECREATEの両方のアクションについて、完全なワイルドカード(*)権限を持つことができます。つまり、特定のMetadataObjectIdsなしでsubmitRequest()を使用して非定型リクエストを発行する場合は、EXECUTEおよびCREATEのアクションを使用して、完全なワイルドカード(*)の権限を付与できます。

23.2.7 メタデータのセキュリティの構成時の処理内容

ユーザー・アプリケーションによってMetdataServiceまたはRuntimeServiceメソッドがコールされるたびに、Oracle Enterprise Schedulerでは、メソッドによってアクセスされるメタデータに対する権限について、現在のサブジェクトを確認します。たとえば、リクエストを発行するには、発行に関連付けられるジョブ定義やジョブ・セットのメタデータ・オブジェクトに対するEXECUTE権限が必要です。updateJobDefinition()をコールするなど、メタデータを変更するメソッドには、UPDATE権限が必要となります。

問合せを除くすべてのMetadataServiceメソッドでは、ユーザーが権限のないメタデータ・オブジェクトにアクセスしようとすると、例外がスローされます。

MetadataService問合せメソッドの場合には動作が異なります。ユーザーが問合せを実行すると、Oracle Enterprise Schedulerにより、READ権限のあるメタデータ・オブジェクトのみが返されます。これにより、メタデータ・オブジェクトに対して権限がないユーザーはすべての問合せについて空のリストを受信しますが、このユーザーには権限がないため、スローされた例外は表示されません。

SystemProperty.USER_NAMEの値は発行時に上書きされるため、ユーザーが発行時にSystemProperty.USER_NAMEを使用して、アイデンティティを偽装することはできません。

23.3 Oracle Enterprise Schedulerのデータのセキュリティの構成

Oracle Enterprise Schedulerスタンドアロン・データ・セキュリティ実装は、RuntimeDataPermissionクラスを使用する機能セキュリティ権限のチェックに基づきます。

デフォルトで、Oracle Enterprise Schedulerは次のレベルのデータ・セキュリティ施行をサポートします。

  • ユーザーは、自分が発行するリクエストのみを操作できます。

  • ユーザーに管理、オペレータまたはモニター・ロールを割り当てることで、リクエストの発行者にかかわらず、すべてのリクエストを表示する権限がユーザーに付与されます。

  • ユーザーは、自分が発行または実行したリクエストによって生成された出力を表示できます。

デフォルトのデータ・セキュリティ権限を追加または変更する場合、「データ・セキュリティ権限の変更方法」の説明に従って、jazn-data.xmlファイルを再構成する必要があります。

23.3.1 データ・セキュリティ権限の変更方法

この項では、「Oracle Enterprise Schedulerのデータ・セキュリティの構成」の説明に従い、即時利用可能なデフォルト設定からジョブ・リクエストのデータ・セキュリティを変更するようにjazn-data.xmlファイルを構成する方法について説明します。

RuntmeDataPermissionを定義するjazn-data.xml権限セクションの例を次に示します。

<permission>
  <name>definition like 'oracle.apps.ess.custom.soa.*',product like         "SOA%",PROPERTY1=VALUE1</name>
  <class>oracle.as.scheduler.security.RuntimeDataPermission</class>
  <actions>ESS_REQUEST_READ,ESS_REQUEST_OUTPUT_READ</actions>
</permission

前述の例で定義されている権限条件では、ジョブ・リクエストが次の条件と一致した場合、ジョブ・リクエストの詳細およびジョブ・リクエスト出力の読取り権限が付与されます。

  • そのジョブ定義がパターン: oracle.apps.ess.custom.soa.*と一致し、

  • 製品フィールドの値がSOAであり、

  • PROPERTY1という名前のユーザー定義プロパティが、VALUE1という値で設定されています。

23.3.1.1 条件

条件は、<name>要素で指定され、=およびlike/LIKE演算子を使用します。%および*のワイルドカード文字は、like/LIKE演算子とともに使用できます。メタデータ・オブジェクト名を指定するフィールド名では%ワイルドカード文字を使用できませんが、フィールド名が別のデータ(製品など)およびリクエスト・カテゴリを指定している場合使用できます。たとえば、次の例は正しく機能します。

  • definition LIKE 'oracle.apps.ess.custom.soa.*'

  • requestCategory LIKE 'EssFineGrained%',workAssignment LIKE'FineGrainedWA%',className LIKE '%BasicJavaJob%'

一方、次のエントリは正しく機能しません

  • definition LIKE 'oracle.apps.ess.custom.soa.%'

条件は、次の固有のデリミタ構文を使用したキーと値のペアのセットとして指定されます。

  • 条件内のキーと値のペアは、「,」文字で区切られます。

  • 空白文字は、「,」デリミタの直前または直後には指定できません。

  • キーと値の条件の値部分は引用符なしとするか、一重引用符または二重引用符で囲むことができます。

  • 同じ要素内で指定されている複数の条件は、論理的にAND演算されるように解釈されます。

  • 同じ権限受領者に2つ以上の権限リソースを定義することで、論理的にOR条件を指定できます。

次のルールが、フィールド名およびreqPropキーに適用されます。

  • フィールド名は、RuntimeService.QueryFieldfieldNameで表される値である必要があります。たとえば、QueryField.DEFINITION.fieldName()です。

  • ResultIndexのリクエスト履歴ビューに同等のフィールドがないため、ResultIndexをフィールド名として指定できません。リクエスト履歴ビューは、Request_history表から作成されるデータベース・ビューです。スタンドアロン・データ・セキュリティのSQL問合せは、このビューに対して実行されます。

  • reqPropは、Oracle Enterprise Schedulerジョブ・メタデータで、またはリクエスト発行時に定義されるユーザー・プロパティです。たとえば、PARTITION_NAME='SOA'です。

  • 表23-2に、有効なフィールド名のリストと、対応するリクエスト履歴ビューの列エントリを示します。

    表23-2 条件問合せフィールドと、対応するリクエスト履歴ビューの列エントリ

    問合せフィールド リクエスト履歴ビューの列

    QueryField.REQUESTID

    requestid

    QueryField.APPLICATION

    application

    QueryField.USERNAME

    userName

    QueryField.PRODUCT

    product

    QueryField.REQUEST_CATEGORY

    requestCategory

    QueryField.PRIORITY

    priority

    QueryField.NAME

    name

    QueryField.ABSPARENTID

    absParentId

    QueryField.TYPE

    type

    QueryField.DEFINITION

    definition

    QueryField.STATE

    state

    QueryField.SCHEDULE

    schedule

    QueryField.PROCESSSTART

    processStart

    QueryField.PROCESSEND

    processEnd

    QueryField.REQUESTEDSTART

    requestedStart

    QueryField.REQUESTEDEND

    requestedEnd

    QueryField.SUBMISSION

    submission

    QueryField.PARENTREQUESTID

    parentRequestId

    QueryField.WORKASSIGNMENT

    workAssignment

    QueryField.SCHEDULE

    scheduled

    QueryField.REQUESTTRIGGER

    requesttrigger

    QueryField.PROCESSOR

    processor

    QueryField.CLASSNAME

    processor

    QueryField.ELAPSEDTIME

    elapsedtime

    QueryField.WAITTIME

    waittime

    QueryField.SUBMITTER

    submitter

    QueryField.SUBMITTERGUID

    submitterguid

23.3.1.1.1 条件の例

次の例は、有効に指定された条件を示しています。

• fieldName=value
• fieldName like 'value%'
• fieldName like "value*"
• reqProp="value"
• reqProp LIKE "value*"
• PermissionName : <name>fieldName1=value1,fieldName2 like 'value2%',reqProp="value",reqProp like 'value*'</name>
23.3.1.2 アクション

使用な可能なアクションには、次の組合せです。

  • ESS_REQUEST_READ

  • ESS_REQUEST_UPDATE

  • ESS_REQUEST_HOLD

  • ESS_REQUEST_CANCEL

  • ESS_REQUEST_LOCK

  • ESS_REQUEST_RELEASE

  • ESS_REQUEST_DELETE

  • ESS_REQUEST_PURGE

  • ESS_REQUEST_OUTPUT_READ

  • ESS_REQUEST_OUTPUT_DELETE

23.3.2

例23-1に、権限を<permission>要素でどのように直接指定するかを示します。

例23-2に、権限セットを使用して権限をどのように指定するかを示します。

ノート:

<permission-sets> - <permission-set> - <member-resources> - <member-resource> - <resource-name>要素で定義される内容は、<resources> - <resource> - <name>要素で定義される内容と同じである必要があります。

例23-1 PL/SQLのリクエスト・テキスト出力

<app-roles>
  <app-role>
    <name>riyanu_soa_role</name>
    <class>oracle.security.jps.service.policystore.ApplicationRole</class>
    <members>
      <member>
        <name>riyanu_soa_group</name>
        <class>weblogic.security.principal.WLSGroupImpl</class>
      </member>
    </members>
  </app-role>
</app-roles>
<grant>
  <grantee>
    <description>Allow soa role to pass through</description>
    <principals>
      <principal>
        <class>oracle.security.jps.service.policystore.ApplicationRole</class>
        <name>riyanu_soa_role</name>
      </principal>
    </principals>
</grantee>
<permissions>
  <permission>
    <name>oracle.apps.ess.custom.soa.*</name>
    <class>oracle.as.scheduler.security.MetadataPermission</class>
    <actions>READ,EXECUTE,CREATE,DELETE,UPDATE</actions>
  </permission>
  <permission>
    <name>definition like oracle.apps.ess.custom.soa.*,           partitionName=SOA_PARTITION,product=SOA</name>
    <class>oracle.as.scheduler.security.RuntimeDataPermission</class>
    <actions>ESS_REQUEST_READ,ESS_REQUEST_UPDATE,              ESS_REQUEST_OUTPUT_READ</actions>
  </permission>
</permissions>
</grant>

例23-2 PLSQLのリクエスト・バイナリ出力の例

<app-roles>
  <app-role>
    <name>riyanu_soa_role</name>
    <class>oracle.security.jps.service.policystore.ApplicationRole</class>
    <members>
      <member>
        <name>riyanu_soa_group</name>
        <class>weblogic.security.principal.WLSGroupImpl</class>
      </member>
    </members>
  </app-role>
</app-roles>
<resource-types>
  <resource-type>
    <name>ESSSOAMetadataResourceType</name>
    <display-name>ESSSOAMetadataResourceType</display-name>
    <description>ESS SOA Metadata Resource</description>
    <matcher-class>oracle.as.scheduler.security.MetadataPermission</matcher-class>
    <actions-delimiter>,</actions-delimiter>
    <actions>create,read,update,delete,execute</actions>
  </resource-type>
  <resource-type>
    <name>ESSSOARequestResourceType</name>
    <display-name>ESSSOARequestResourceType</display-name>
    <description>Resource type for simple ESS request accesscontrol</description>
    <matcher-class>oracle.as.scheduler.security.RuntimeDataPermission     </matcher-class>
    <actions-delimiter>,</actions-delimiter>
    <actions>ESS_REQUEST_READ,ESS_REQUEST_UPDATE,ESS_REQUEST_CANCEL,     ESS_REQUEST_DELETE,ESS_REQUEST_OUTPUT_READ</actions>
  </resource-type>
</resource-types>
  <resources>
    <resource>
       <name>oracle.apps.ess.custom.soa.*</name>
       <type-name-ref>ESSSOAMetadataResourceType</type-name-ref>
       <description>All SOA ESS metadata</description>
       <display-name>All SOA ESS metaddata</display-name>
    </resource>
    <resource>
       <name>definition like "oracle.apps.ess.custom.soa.*",        partitionName=SOA_PARTITION,product=SOA</name>
       <type-name-ref>ESSSOARequestResourceType</type-name-ref>
       <description>Any ESS Multi request</description>
       <display-name>Any ESS Multi request</display-name>
    </resource>
  </resources>
  <permission-sets>
    <permission-set>
      <name>READ_ALL_SOA_MULTI_METADATA_RIYANU</name>
      <display-name>Read privilege on all SOA ESS metadata
      </display-name>
      <description>Read privilege on all SOA ESS metadata</description>
      <member-resources>
        <member-resource>
          <type-name-ref>ESSSOAMetadataResourceType</type-name-ref>
          <resource-name>oracle.apps.ess.custom.soa.*</resource-name>
          <actions>create,read,execute</actions>
        </member-resource>
      </member-resources>
    </permission-set>
  <permission-set>
    <name>READ_ALL_ESS_SOA_REQUESTS_RIYANU</name>
    <display-name>All privileges on all ESS Requests</display-name>
    <description>Allow read, update, cancel, hold, delete all the ESS      requests</description>
    <member-resources>
      <member-resource>
        <type-name-ref>ESSSOARequestResourceType</type-name-ref>
        <resource-name>definition like        "oracle.apps.ess.custom.soa.*",         partitionName=SOA_PARTITION,product=SOA</resourcename>
        <actions>ESS_REQUEST_READ,ESS_REQUEST_OUTPUT_READ</actions>
      </member-resource>
    </member-resources>
  </permission-set>
</permission-sets>
<jazn-policy>
  <grant>
    <grantee>
      <principals>
        <principal>
          <class>oracle.security.jps.service.policystore.ApplicationRole</class>
          <name>riyanu_soa_role</name>
        </principal>
      </principals>
    </grantee>
    <permission-set-refs>
      <permission-set-ref>
        <name>READ_ALL_SOA_MULTI_METADATA_RIYANU</name>
      </permission-set-ref>
      <permission-set-ref>
        <name>READ_ALL_ESS_SOA_REQUESTS_RIYANU</name>
      </permission-set-ref>
    </permission-set-refs>
  </grant>
</jazn-policy>

23.4 Oracle Enterprise SchedulerのWebサービス・セキュリティの構成

Oracle Enterprise Scheduler Webサービスの保護の詳細は、「Oracle Enterprise Scheduler Webサービスの使用」を参照してください。

23.5 Oracle Enterprise SchedulerのPL/SQLジョブのセキュリティの構成

PL/SQLジョブでは、ess_runtimeパッケージのAPIをコールするときに、データのセキュリティ・チェックを行いません。

23.6 Oracle Enterprise Schedulerジョブに対する権限の昇格

ユーザーがOracle Enterprise SchedulerサービスにRuntimeServiceまたはMetadataServiceインタフェースを使用してアクセスする場合、メソッドをコールしているユーザーのアイデンティティが取得されます。特定のリソース(メタデータ・オブジェクトなど)へのアクセスに必要な権限がユーザーにあるかどうかを確認するために、このアイデンティティが使用されます。

たとえば、ユーザーteller1がメソッドgetJobDefinitionをメタデータ・オブジェクトcaclulateFeesに対してコールする場合、Oracle Enterprise Schedulerでは、オブジェクトを返す前に、メタデータ・オブジェクトcaclulateFeesに対する読取り権限がteller1にあることを確認します。

コール元のアイデンティティは、ユーザーによってリクエストされたジョブの実行にも使用されます。たとえば、ユーザーteller1がメソッドsubmitRequest()をJavaジョブに対してコールする場合、リクエストされたジョブはteller1の下で実行され、そのユーザーに対して割り当てられたロールおよび資格証明はすべて保持されます。

Oracle Enterprise Schedulerでは、アプリケーション・アイデンティティの使用がサポートされています。アプリケーション・アイデンティティを使用すると、発行元ユーザーに割り当てられている権限よりも高い権限を必要とするジョブを完了するために、権限を昇格できます。

23.7 Oracle Enterprise Schedulerの単一のポリシー・ストライプの構成

Oracle Platform Securityポリシー・ストアは、認可ポリシーのリポジトリとして機能します。認可ポリシーは実行時にJava仮想マシンにロードされ、認可に関する決定を行うために使用されます。認可ポリシーは、アプリケーション・ロールの階層、エンタープライズ・ロールのアプリケーション・ロールへのマッピングおよびアプリケーション・ロールへの権限付与で構成されています。アプリケーション・ロールを階層的にすることもできます。

認可ポリシーに加えて、Oracle Platform Securityポリシー・ストアには、これらの認可ポリシーを保持するのに役立つ管理構成(関連するリソース・タイプを含むリソース・カタログ、権限セット、ロール・カテゴリなど)も格納されます。認可ポリシーおよび管理コンポーネントは、アプリケーションにスコープされています。これは、アプリケーション・ストライプと呼ばれます。

アプリケーション・ストライプとは、JAASポリシーのコレクションのことで、それが関連付けられたアプリケーションに適用可能です。購入した時点で、1つのアプリケーション・ストライプが1つのOracle Java EEアプリケーションにマップされています。Oracle Platform Securityでは、複数のJava EEアプリケーションの1つのアプリケーション・ストライプに対するマッピングもサポートされています。アプリケーションID文字列によって、1つまたは複数のアプリケーションの名前が識別されます。

23.7.1 Oracle Enterprise Schedulerの単一のポリシー・ストライプの構成方法

Oracle Enterprise Schedulerを使用すると、applicationStripe名を指定して、JPSポリシー・コンテキストIDにマッピングできます。アプリケーションをホストする複数のOracle Enterprise Schedulerを単一のポリシー・コンテキストに割り当てることができます。

アプリケーションをホストするOracle Enterprise Schedulerを特定のapplicationStripeに対して構成するには:

  1. ejb-jar.xmlファイルを開きます。
  2. message-driven要素で、値applicationStripeを含むactivation-config-properties要素を追加します。
  3. jpsinterceptor-class要素で、JpsInterceptorを構成します。

    <message-driven>要素の下にあるapplicationStripe値が、<interceptor>要素の下にあるapplication.name値と必ず一致するようにしてください。

    例23-3に、ポリシー・コンテキストESS_FUNCTIONAL_TEST_APP_STRIPEに対するapplicationStripe構成を示します。

  4. アプリケーションにWebモジュールが含まれている場合、web.xmlファイルで、WebモジュールJpsFilterによって同じapplicationStripeが使用されるように構成します。例23-4に、コード・サンプルを示します。

例23-3 applicationStripeおよびJpsInterceptorの構成

<ejb-jar>
   ....
 
   <enterprise-beans>
    <message-driven>
      <ejb-name>ESSAppEndpoint</ejb-name>
      <ejb-class>oracle.as.scheduler.ejb.EssAppEndpointBean</ejb-class>
      <activation-config>
        ....
        <activation-config-property>
          <activation-config-property-name>applicationStripe</activation-config-property-name>
          <activation-config-property-value>ESS_FUNCTIONAL_TESTS_APP_
            STRIPE</activation-config-property-value>
        </activation-config-property>
      </activation-config>
    </message-driven>
    .....
 
  </enterprise-beans>
 
  <interceptors>
    <interceptor>
      <interceptor-class>oracle.security.jps.ee.ejb.JpsInterceptor</interceptor-class>
      <env-entry>
        <env-entry-name>application.name</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>ESS_FUNCTIONAL_TESTS_APP_STRIPE</env-entry-value>
        <injection-target>
          <injection-target-class>oracle.security.jps.ee.ejb.JpsInterceptor
          </injection-target-class>
          <injection-target-name>application_name</injection-target-name>
        </injection-target>
      </env-entry>
    </interceptor>
  </interceptors>
</ejb-jar>

例23-4 web.xmlでのWebモジュールの構成

<web-app>
  <filter>
      <filter-name>JpsFilter</filter-name>
      <filter-class>oracle.security.jps.ee.http.JpsFilter</filter-class>
      ...
      <init-param>
          <param-name>application.name</param-name>
          <param-value>ESS_FUNCTIONAL_TESTS_APP_STRIPE</param-value>
      </init-param>
  </filter>
 
</web-app>

23.7.2 単一のポリシー・ストライプの構成時の処理内容

設計時には、アプリケーション・ストライプは次のものとして表されます。

  • jazn-data.xmlファイルの<policystore>要素の下の<application>要素

  • ノードcn=<Weblogic.domain.name>,cn=JPSContext,cn=<root.node>の下のノード(cn=ATGDemo,cn=base_domain,cn=JPSContext,cn=MY_Nodeなど)

23.7.3 実行時の処理

実行時には、アプリケーション・ストライプは、クラスoracle.security.jps.service.policystore.ApplicationPolicyのインスタンスとして表されます。