ヘッダーをスキップ

Oracle Database Application Expressユーザーズ・ガイド リリース 3.0 E05267-02 |
| 目次 | 索引

前へ | 次へ |

# 11 アプリケーション・セキュリティの管理

このセクションでは、Oracle Application Expressアプリケーションにセキュリティを提供する方法を説明します。クロスサイト・スクリプティング保護、セッション・ステート保護、認証および認可を使用して、Oracle Application Expressのアプリケーションにセキュリティを提供できます。

このセクションの内容は次のとおりです。

- クロスサイト・スクリプティング保護

- Oracle Database 11gのネットワーク・サービスの有効化

- セッション・ステート保護の理解

- ファイル・アップロード表のセキュリティ・リスクの理解

- 認証によるユーザー・アイデンティティの証明

- 認可を介したセキュリティの提供

参照: 「アプリケーション・ビルダーの概念」および「アプリケーション・ビルダーの使用」

## クロスサイト・スクリプティング保護

クロスサイト・スクリプティング（XSS）は、動的に生成されるWebページを利用するセキュリティ攻撃です。XSS攻撃では、ユーザーのブラウザに読み込まれたときにアクティブになるスクリプトがWebアプリケーションに送信されます。これらのスクリプトがアクティブになると、データまたは場合によってはセッション資格証明が盗まれ、それらの情報が攻撃者に送信される可能性があります。

悪意のあるコードがOracle Application Expressアプリケーションに侵入すると、通常のページ・レンダリング時に、そのコードがアプリケーション内のHTMLリージョンや他の場所にレンダリングされる可能性があります。セッション・ステートへの不正なコードの挿入を阻止するため、Application Expressエンジンは特定の場合に文字をエスケープします。

このセクションの構成は次のとおりです。

- HTMLリージョンなどの静的領域の保護

- 動的出力の保護

- レポート・リージョンの保護

- フォーム・アイテムの保護

### HTMLリージョンなどの静的領域の保護

HTMLリージョンなどの静的表示領域では、`&ITEM.`表記法を使用してセッション・ステートを参照できます。静的表示領域の例には、HTMLリージョン、ページのヘッダーとフッター、リージョンのヘッダーとフッター、リージョン・タイトル、ボタン・ラベル、ヘルプ・テキスト、フォーム・アイテム・ラベルおよび要素の後のテキスト、テンプレート、（フィールド・テキストの前後の）ラジオ・グループ、イベント成功メッセージ、イベント・エラー・メッセージ、ナビゲーション・バー属性、アプリケーション静的置換文字列値、チャート・ラベルおよび凡例、ブレッドクラムおよびリスト・フレーム・テキスト、カレンダ・テキスト、ラベル、凡例などがあります。

#### 安全なアイテム表示タイプの概要

セッション・ステートがこのように参照される場合、ページに表示される値には、参照されるアイテムに次の安全なアイテム表示タイプのいずれかが含まれている場合にエスケープされる特殊文字（`<`、`>`、`&`、`"`）が含まれます。

- テキストとして表示（状態は保存しない）

- テキストとして表示（特殊文字をエスケープし、状態は保存しない）

- テキストとして表示（LOVに基づき、状態は保存しない）

- テキストとして表示（PL/SQLに基づき、状態は保存しない）

- テキスト・フィールド（無効、状態を保存しない）

- HTML表の停止および開始（ラベルのみ表示）

参照されるアイテムに前述のタイプ以外の表示タイプが含まれている場合、ページに表示される値には、エスケープされる特殊文字は含まれません。また、アプリケーション・レベルのアイテムには、安全な表示タイプが含まれているとみなされますが、実際にフォーム・アイテムに含まれているような表示プロパティは含まれていません。

参照: 「ページ・レベル・アイテムの理解」

#### 値をエスケープするかどうかを決定するために使用されるルールについて

Application Expressエンジンは、事前定義済のスマート・エスケープ・ルールを使用して、セッション・ステートからフェッチされた値をエスケープするかどうか、およびいつそれを実行するかを決定します。

このルールを使用するのは、前にリストした表示タイプを使用したアイテムは、通常フィルタ処理（エスケープ）されずにブラウザに表示されることを意図したHTMLを含むテキスト用であるためです。安全に行われる方法は、これらのタイプのアイテムが常にエスケープされてアプリケーションに入力されるルールを実施する以外にありません。たとえば、ユーザーが、Oracle Application Expressのf?p URL構文を使用して、一部のテキストを安全なアイテムに渡す場合、Application Expressエンジンは値をセッション・ステートに保存する際に特殊文字をエスケープします。これにより次の2つの結果が予想されます。

1. 値に特殊文字が含まれていなかった場合、渡された値は指定されたとおりにセッション・ステートに保存される。

2. 値に特殊文字が含まれていた場合、値をセッション・ステートに保存する際に特殊文字をエスケープする。

いずれの状況でも、アイテムは、現在、前述のHTMLリージョンなどの静的領域で`&ITEM.`表記法を使用して安全に参照できます。

#### 安全なアイテム・タイプを使用したHTMLマークアップの保持および表示

前にリストした安全なアイテム・タイプを使用して、ブラウザにHTMLマークアップを保持および表示します。たとえば、安全なページ・アイテム`P1_XXX`（`&P1_XXX`を使用）を参照して、太字で一部のテキストをレンダリングする要件があるとします。アイテム`P1_XXX`には次のHTMLが含まれているとします。

    <b>ABABABAB</b>

実行するには、アプリケーション・コントロール（計算、プロセス、アイテムのソース式、アイテムのデフォルト値など）を使用して、値をこれらの安全なアイテムに格納します。値をこのように挿入する場合は、コンテンツの安全性を確認します。これらの方法を使用する場合、Application Expressエンジンは、値をセッション・ステートに保存する際に特殊文字をエスケープしません。

安全なアイテムの安全性は、最終的に、アイテムがページにポストされず、ページ送信の一部としてApplication Expressエンジンに発行されないルールによって確認されます。

### 動的出力の保護

`htp.p`などの方法を使用してセッション・ステートからフェッチし、レンダリングするアイテムは、必要に応じてコードで明示的にエスケープする必要があります。たとえば、ページ上のPL/SQL動的コンテンツ・リージョンで次のhtp.pを使用するとします。

     htp.p(v('SOME_ITEM'));

セッション・ステートからフェッチするアイテムの値に予期しないタグやスクリプトが含まれる可能性がある場合は、リージョンで次のhtp.pを使用できます。

    htp.p(htf.escape_sc(v('SOME_ITEM')));

ただし、フェッチする値を安全にレンダリングできることが確かな場合は、この値をエスケープする必要はありません。開発者は、出力をエスケープしない方が適切な場合を判断する必要があります。

次のように、このルールに従うことをお薦めします。

- アイテムが「安全なアイテム表示タイプの概要」に示される安全なタイプのいずれかでないかぎり、エスケープせずにセッション・ステートからフェッチされたアイテムを表示しないでください。

これを行うのは、開発者としてハッカーが悪意ある値を安全ではないアイテムにポストするのを防ぐ方法はないためです。アプリケーションがこれらのアイテムを一般ユーザーに見えるように表示しなくても、このルールに従わないと、ハッカーはアプリケーションを使用してXSS攻撃をマウントできることに注意してください。

### レポート・リージョンの保護

Application Expressエンジンは、レポートのボディでレンダリングされるデータをエスケープします。レポートのヘッダーおよびメッセージにおけるセッション・ステートへの参照は、安全なアイテム・タイプの値はエスケープされず、その他のアイテム・タイプの値はエスケープされるように、スマート・エスケープ・ルールを使用してセッション・ステートからフェッチされます。

### フォーム・アイテムの保護

ブラウザに送信されるフォーム・ページの生成中に、フォーム・アイテム（隠しアイテムなど）が値を取得する場合、結果テキストはレンダリング前にエスケープされます。一部の安全なアイテム・タイプは、各表示タイプの意図する動作をサポートするため、このルールにおける例外となります。

## Oracle Database 11gのネットワーク・サービスの有効化

Oracle Database 11g リリース1（11.1）では、ネットワーク・サービスとの通信機能がデフォルトで無効になっています。 このため、Oracle Database 11g リリース1（11.1）でOracle Application Expressを実行している場合は、新しい`DBMS_NETWORK_ACL_ADMIN`パッケージを使用して、`FLOWS_030000`データベース・ユーザーにすべてのホストに対する接続権限を付与する必要があります。これらの権限を付与しないと、次の場合に問題が発生します。

- Oracle Application Expressによる外部への電子メールの送信

  ユーザーは`APEX_MAIL`パッケージからメソッドをコールできますが、外部へ電子メールを送信するときに問題が発生します。

- Oracle Application Express内のWebサービスの使用

- PDF/レポートの印刷

- （「検索」リンクを使用した）オンライン・ヘルプ・コンテンツの検索

接続権限の付与

次の例では、`FLOWS_030000`データベース・ユーザーにすべてのホストに対する接続権限を付与する方法が示されています。

    DECLARE
      ACL_PATH  VARCHAR2(4000);
      ACL_ID    RAW(16);
    BEGIN
      -- Look for the ACL currently assigned to '*' and give FLOWS_030000
      -- the "connect" privilege if FLOWS_030000 does not have the privilege yet.

      SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
       WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;

      -- Before checking the privilege, make sure that the ACL is valid
      -- (for example, does not contain stale references to dropped users).
      -- If it does, the following exception will be raised:
      --
      -- ORA-44416: Invalid ACL: Unresolved principal 'FLOWS_030000'
      -- ORA-06512: at "XDB.DBMS_XDBZ", line ...
      --
      SELECT SYS_OP_R2O(extractValue(P.RES, '/Resource/XMLRef')) INTO ACL_ID
        FROM XDB.XDB$ACL A, PATH_VIEW P
       WHERE extractValue(P.RES, '/Resource/XMLRef') = REF(A) AND
             EQUALS_PATH(P.RES, ACL_PATH) = 1;

      DBMS_XDBZ.ValidateACL(ACL_ID);
       IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'FLOWS_030000',
         'connect') IS NULL THEN
          DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
         'FLOWS_030000', TRUE, 'connect');
      END IF;

    EXCEPTION
      -- When no ACL has been assigned to '*'.
      WHEN NO_DATA_FOUND THEN
      DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
        'ACL that lets power users to connect to everywhere',
        'FLOWS_030000', TRUE, 'connect');
      DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
    END;
    /
    COMMIT;

無効なACLエラーのトラブルシューティング

前述のスクリプトの実行後に`「ORA-44416: 無効な ACL」`エラーを受信したら、次の問合せを使用して無効なACLを識別します。

    REM Show the dangling references to dropped users in the ACL that is assigned
    REM to '*'.

    SELECT ACL, PRINCIPAL
      FROM DBA_NETWORK_ACLS NACL, XDS_ACE ACE
     WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL AND
           NACL.ACLID = ACE.ACLID AND
           NOT EXISTS (SELECT NULL FROM ALL_USERS WHERE USERNAME = PRINCIPAL);

次に、次のコードを実行してACLを修正します。

    DECLARE
      ACL_ID   RAW(16);
      CNT      NUMBER;
    BEGIN
      -- Look for the object ID of the ACL currently assigned to '*'
      SELECT ACLID INTO ACL_ID FROM DBA_NETWORK_ACLS
       WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;

      -- If just some users referenced in the ACL are invalid, remove just those
      -- users in the ACL. Otherwise, drop the ACL completely.
      SELECT COUNT(PRINCIPAL) INTO CNT FROM XDS_ACE
       WHERE ACLID = ACL_ID AND
             EXISTS (SELECT NULL FROM ALL_USERS WHERE USERNAME = PRINCIPAL);

      IF (CNT > 0) THEN

        FOR R IN (SELECT PRINCIPAL FROM XDS_ACE
                   WHERE ACLID = ACL_ID AND
                         NOT EXISTS (SELECT NULL FROM ALL_USERS
                                      WHERE USERNAME = PRINCIPAL)) LOOP
          UPDATE XDB.XDB$ACL
             SET OBJECT_VALUE =
                   DELETEXML(OBJECT_VALUE,
                             '/ACL/ACE[PRINCIPAL="'||R.PRINCIPAL||'"]')
           WHERE OBJECT_ID = ACL_ID;
        END LOOP;

      ELSE
        DELETE FROM XDB.XDB$ACL WHERE OBJECT_ID = ACL_ID;
      END IF;

    END;
    /

    REM commit the changes.

    COMMIT;

ACLを修正したら、このセクションにある最初のスクリプトを実行して、`FLOWS_030000`ユーザーにACLを適用する必要があります。 「接続権限の付与」を参照してください。

## セッション・ステート保護の理解

セッション・ステート保護は、ハッカーがアプリケーション内のURLを改ざんするのを防ぐための組込み機能です。URL改ざんにより、プログラム・ロジック、セッション・ステートの内容および情報プライバシが悪影響を受ける可能性があります。

セッション・ステート保護は2ステップのプロセスで有効にします。最初に、この機能を有効にします。次に、ページおよびアイテムのセキュリティ属性を設定します。

このセクションの構成は次のとおりです。

- セッション・ステート保護の仕組み

- セッション・ステート保護の有効化

- セッション・ステート保護の構成

### セッション・ステート保護の仕組み

セッション・ステート保護を有効にすると、「ページ・アクセス保護」属性と「セッション・ステート保護」アイテム属性が、`f?p=` URL内に配置されたチェックサムとともに使用され、URL改ざんと、セッション・ステートへの権限のないアクセスおよび変更が防止されます。セッション・ステート保護を無効にすると、セッション・ステート保護に関連するページ属性およびアイテム属性が無視され、生成される`f?p=` URLにはチェックサムが含まれません。

### セッション・ステート保護の有効化

セッション・ステート保護は、「セキュリティ属性の編集」ページまたは「セッション・ステート保護」ページから有効にできます。

セッション・ステート保護は2ステップのプロセスで有効にします。最初に、この機能を有効にします。次に、ページおよびアイテムのセキュリティ属性を設定します。これらのステップは、ウィザードを使用して実行するか、セッション・ステート保護ページでページおよびアイテムのセキュリティ属性を手動で設定して行います。

このセクションの構成は次のとおりです。

- 「セキュリティ属性の編集」からのセッション・ステート保護の有効化

- 「セッション・ステート保護」からのセッション・ステート保護の有効化

#### 「セキュリティ属性の編集」からのセッション・ステート保護の有効化

「セキュリティ属性の編集」ページからセッション・ステート保護を有効にするには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. 「共有コンポーネント」アイコンをクリックします。

4. 「セキュリティ」で、「セキュリティ属性の編集」をクリックします。

5. 「セッション・ステート保護」までスクロールして、「セッション・ステート保護」リストの「有効」を選択します。

6. セッション・ステート保護を構成するには、「セッション・ステート保護の管理」をクリックします。

   「セッション・ステート保護」ページが表示されます。

7. 「セキュリティ属性の編集」ページにナビゲートして、ページおよびアイテムのセキュリティ属性を設定します。

ヒント: セッション・ステート保護を無効にするには、同じステップを再度実行しますが、「有効」のかわりに「無効」を選択します。セッション・ステート保護を無効にしても、既存のセキュリティ属性の設定は変更されませんが、それらの属性は実行時に無視されます。

##### 「ブックマークの無効化」ボタン

セッション・ステート保護を有効にすると、カレント・アプリケーションへのブックマーク・リンクが機能するかどうかに影響します。次の規則を考慮してください。

1. セッション・ステート保護を有効にした後に作成したブックマーク・リンクは、ブックマーク・リンクにチェックサムが含まれている場合に機能します。

2. セッション・ステート保護を有効にする前に作成したブックマーク・リンクは、ブックマーク・リンクにチェックサムが含まれている場合は機能しません。

3. チェックサムが含まれていないか、または不要なチェックサムが含まれているブックマークは、セッション・ステート保護の影響を受けません。

ページ・レンダリング時、Application Expressエンジンは、計算中に非表示のアプリケーション属性（チェックサムsalt）を使用し、`f?p` URLに含まれているチェックサムを確認します。セッション・ステート保護を有効にすると、Application Expressエンジンにチェックサムが含まれます。チェックサムsalt属性を再設定するには、セキュリティ属性の編集ページで「ブックマークの無効化」をクリックします。「ブックマークの無効化」をクリックすると、以前に生成されたチェックサムを含むアプリケーションへのアクセスに使用するブックマークURLが失敗することに注意してください。

#### 「セッション・ステート保護」からのセッション・ステート保護の有効化

セッション・ステート保護を有効にするには、次のステップを実行します。

1. 共有コンポーネント・ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「セキュリティ」で、「セッション・ステート保護」を選択します。

   「セッション・ステート保護」ページが表示されます。セッション・ステート保護の現行のステータス（有効または無効）がページ上部に表示されることに注意してください。

2. 「保護の設定」ボタンをクリックします。

   「セッション・ステート保護」ウィザードが表示されます。

3. 「操作の選択」で、「有効化」を選択して、「次へ」をクリックします。

   次に、ページおよびアイテムのセキュリティ属性を設定するかどうか決定します。

4. 「有効化」を選択して、「次へ」をクリックします。

5. 「セッション・ステート保護の有効化」をクリックします。

ヒント: セッション・ステート保護を無効にするには、同じステップを実行しますが、「有効化」のかわりに「無効化」を選択します。セッション・ステート保護を無効にしても、既存のセキュリティ属性の設定は変更されませんが、実行時にはそれらが無視されます。

### セッション・ステート保護の構成

セッション・ステート保護を有効にした後、セキュリティ属性を構成します。セキュリティ属性は2つの方法で構成できます。

- ウィザードを使用し、特定の属性カテゴリの値を選択する。この場合、選択内容がアプリケーション内のすべてのページおよびアイテムに適用されます。

- 個々のページ、アイテムまたはアプリケーション・アイテムの値を構成する。

このセクションの構成は次のとおりです。

- 既存のセッション・ステート保護設定の確認

- ウィザードを使用したセッション・ステート保護の構成

- ページのセッション・ステート保護の構成

- アイテムのセッション・ステート保護の構成

- アプリケーション・アイテムのセッション・ステート保護の構成

ヒント: セキュリティ属性を構成する前に、まずセッション・ステート保護を有効にする必要があります。「セッション・ステート保護の有効化」を参照してください。

#### 既存のセッション・ステート保護設定の確認

「セッション・ステート保護」ウィザードの最初のページでは、ページ、アイテムおよびアプリケーション・アイテムのセッション・ステート保護設定のサマリーを確認できます。

既存のセッション・ステート保護設定のサマリーを表示するには、次のステップを実行します。

1. 「セッション・ステート保護」ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「セキュリティ」で、「セッション・ステート保護」を選択します。

      「セッション・ステート保護」ページが表示されます。

2. 「保護の設定」をクリックします。

3. ページ下部で次のレポートを開きます。

   - ページ・レベルのセッション・ステート保護サマリー

   - ページ・アイテムのセッション・ステート保護サマリー

   - アプリケーション・アイテムのセッション・ステート保護

#### ウィザードを使用したセッション・ステート保護の構成

ウィザードを使用してセッション・ステート保護を構成するときは、特定の属性カテゴリの値を設定します。この場合、選択内容がアプリケーション内のすべてのページおよびアイテムに適用されます。

ウィザードを使用してセッション・ステート保護を構成するには、次のステップを実行します。

1. 「セッション・ステート保護」ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「セキュリティ」で、「セッション・ステート保護」を選択します。

      「セッション・ステート保護」ページが表示されます。

2. 「保護の設定」をクリックします。

   「セッション・ステート保護」ウィザードが表示されます。

3. 「操作の選択」で、「構成」を選択して、「次へ」をクリックします。

4. 「ページ・アクセス保護」で、次のいずれかを選択します。

   - 制限なし: セッション・ステート引数（Request、Clear Cache、Name/Values）の有無にかかわらず、URLを使用してページを要求できます。

   - 引数にチェックサムが必要: URLにRequest、Clear CacheまたはName/Value引数が表示されている場合は、チェックサムも提供する必要があります。チェックサム・タイプは、引数として渡されるすべてのアイテムの最も厳密なセッション・ステート保護属性と互換性がある必要があります。

   - 引数使用不可: URLを使用してページを要求できますが、Request、Clear CacheまたはName/Value引数は許可されません。

   - URLアクセスなし: URLを使用してページにアクセスできませんが、ページは、URLリダイレクトを行わない「ページにブランチ」ブランチ・タイプのターゲットにできます。

5. 「アプリケーション・アイテム保護」で、次のいずれかの項目を選択します。

   - 制限なし: URLまたはフォームでアイテム名/値を渡して、アイテムのセッション・ステートを設定できます。URLにチェックサムは必要ありません。

   - チェックサムが必要 - アプリケーション・レベル: スキーマ固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。ユーザー・レベル・チェックサムまたはセッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: ユーザー・レベル: 作業領域、アプリケーションおよびユーザー固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。セッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: セッション・レベル: カレント・セッション固有のチェックサムも入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。カレント・セッションで生成されたチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - 制限付き - ブラウザから設定できない: URLまたはPOSTDATAを使用してアイテムを変更できません。アイテムの値を内部プロセス、計算などに設定できる方法を制限する場合は、このオプションを使用します。この属性は、データ・エントリ・アイテムとして使用できないアイテムのみに適用され、セッション・ステート保護が無効になっていても常に監視されます。

     次の表示形式タイプのアプリケーション・アイテムまたはページ・アイテムについては、この属性を使用します。

     - テキストとして表示（特殊文字をエスケープし、状態は保存しない）

     - テキストとして表示（状態は保存しない）

     - テキストとして表示（LOVに基づき、状態は保存しない）

     - テキストとして表示（PL/SQLに基づき、状態は保存しない）

     - テキスト・フィールド（無効、状態を保存しない）

     - HTML表の停止および開始（ラベルのみ表示）

6. 「ページのデータ・エントリ・アイテム保護」で、次のいずれかの項目を選択します。

   - 制限なし: URLまたはフォームでアイテム名/値を渡して、アイテムのセッション・ステートを設定できます。URLにチェックサムは必要ありません。

   - チェックサムが必要 - アプリケーション・レベル: スキーマ固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。ユーザー・レベル・チェックサムまたはセッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: ユーザー・レベル: 作業領域、アプリケーションおよびユーザー固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。セッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: セッション・レベル: カレント・セッション固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。カレント・セッションで生成されたチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

7. 「ページの表示専用アイテム保護」で、次のいずれかの項目を選択します。

   - 制限なし: URLまたはフォームでアイテムの名前/値を渡して、アイテムを設定できます。URLにチェックサムは必要ありません。

   - チェックサムが必要 - アプリケーション・レベル: スキーマ固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。ユーザー・レベル・チェックサムまたはセッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: セッション・レベル: カレント・セッション固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。カレント・セッションで生成されたチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: ユーザー・レベル: 作業領域、アプリケーションおよびユーザー固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。セッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - 制限付き - ブラウザから設定できない: URLまたはPOSTDATAを使用してアイテムを変更できません。アイテムの値を内部プロセス、計算などに設定できる方法を制限する場合は、このオプションを使用します。この属性は、セッション・ステート保護が無効になっていても、常に監視されます。

     次の表示形式タイプについては、この属性を使用します。

     - テキストとして表示（特殊文字をエスケープし、状態は保存しない）

     - テキストとして表示（状態は保存しない）

     - テキストとして表示（LOVに基づき、状態は保存しない）

     - テキストとして表示（PL/SQLに基づき、状態は保存しない）

     - テキスト・フィールド（無効、状態を保存しない）

     - HTML表の停止および開始（ラベルのみ表示）

8. 「次へ」をクリックします。

9. 「終了」をクリックします。

#### ページのセッション・ステート保護の構成

ページのセッション・ステート保護を構成するには、次のステップを実行します。

1. 「セッション・ステート保護」ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「セキュリティ」で、「セッション・ステート保護」を選択します。

      「セッション・ステート保護」ページが表示されます。

2. 「ページ」アイコンをクリックします。

3. ビューにフィルタを適用するには、ページ上部の「ページ」、「表示」および「ページ・アクセス保護」リストを使用します。

4. ページ番号を選択します。

   「ページおよびアイテム保護の設定」ページが表示されます。次の情報がページの上部に表示されます。

   - アプリケーションIDおよび名前

   - セッション・ステート保護のステータス（有効または無効）

   - ページ番号

   - ページ名

5. 「ページ・アクセス保護」で、次のいずれかを選択します。

   - 制限なし: セッション・ステート引数（Request、Clear Cache、Name/Values）の有無にかかわらず、URLを使用してページを要求できます。

   - 引数にチェックサムが必要: URLにRequest、Clear CacheまたはName/Value引数が表示されている場合は、チェックサムも提供する必要があります。チェックサム・タイプは、引数として渡されるすべてのアイテムの最も厳密なセッション・ステート保護属性と互換性がある必要があります。

   - 引数使用不可: URLを使用してページを要求できますが、Request、Clear CacheまたはName/Value引数は許可されません。

   - URLアクセスなし: URLを使用してページにアクセスできませんが、ページは、URLリダイレクトを行わない「ページにブランチ」ブランチ・タイプのターゲットにできます。

6. 「アイテム・タイプ」で、「データ・エントリ・アイテム」または「表示専用アイテム」を選択します。

   データ・エントリ・アイテムは、フォームを使用して変更できるアイテムであり、非表示アイテムもこれに含まれます。表示専用アイテムはレンダリングされるだけで、フォームとともに送信されません。

7. 「データ・エントリ・アイテム」を選択した場合は、各アイテムのセッション・ステート保護レベルを選択します。

   - 制限なし: URLまたはフォームでアイテム名/値を渡して、アイテムのセッション・ステートを設定できます。URLにチェックサムは必要ありません。

   - チェックサムが必要 - アプリケーション・レベル: スキーマ固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。ユーザー・レベル・チェックサムまたはセッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: ユーザー・レベル: 作業領域、アプリケーションおよびユーザー固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。セッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: セッション・レベル: カレント・セッション固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。カレント・セッションで生成されたチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

8. 「表示専用アイテム」を選択した場合は、各アイテムのセッション・ステート保護レベルを選択します。

   - 制限なし: URLまたはフォームでアイテムの名前/値を渡して、アイテムを設定できます。URLにチェックサムは必要ありません。

   - 制限付き - ブラウザから設定できない: URLまたはPOSTDATAを使用してアイテムを変更できません。アイテムの値を内部プロセス、計算などに設定できる方法を制限する場合は、このオプションを使用します。この属性は、セッション・ステート保護が無効になっていても、常に監視されます。次の表示形式タイプについては、この属性を使用します。

     - テキストとして表示（特殊文字をエスケープし、状態は保存しない）

     - テキストとして表示（状態は保存しない）

     - テキストとして表示（LOVに基づき、状態は保存しない）

     - テキストとして表示（PL/SQLに基づき、状態は保存しない）

     - テキスト・フィールド（無効、状態を保存しない）

     - HTML表の停止および開始（ラベルのみ表示）

   - チェックサムが必要 - アプリケーション・レベル: スキーマ固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。ユーザー・レベル・チェックサムまたはセッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: ユーザー・レベル: 作業領域、アプリケーションおよびユーザー固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。セッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: セッション・レベル: カレント・セッション固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。カレント・セッションで生成されたチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

9. 「変更の適用」をクリックします。

#### アイテムのセッション・ステート保護の構成

アイテムのセッション・ステート保護を構成するには、次のステップを実行します。

1. 「セッション・ステート保護」ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「セキュリティ」で、「セッション・ステート保護」を選択します。

      「セッション・ステート保護」ページが表示されます。

2. 「アイテム」アイコンをクリックします。

3. ビューにフィルタを適用するには、ページ上部の「ページ」、「表示」および「アイテムのセッション・ステート保護」リストから項目を選択して、「実行」をクリックします。

4. ページ番号を選択します。

   ページおよびアイテムのセッション・ステート保護の編集のページが表示されます。次の情報がページの上部に表示されます。

   - アプリケーションIDおよび名前

   - セッション・ステート保護のステータス（有効または無効）

   - ページ番号

   - ページ名

5. 「ページ・アクセス保護」で、各アイテムのセッション・ステート保護レベルを選択します。

   - 制限なし: セッション・ステート引数（Request、Clear Cache、Name/Values）の有無にかかわらず、URLを使用してページを要求できます。

   - 引数にチェックサムが必要: URLにRequest、Clear CacheまたはName/Value引数が表示されている場合は、チェックサムも提供する必要があります。チェックサム・タイプは、引数として渡されるすべてのアイテムの最も厳密なセッション・ステート保護属性と互換性がある必要があります。

   - 引数使用不可: URLを使用してページを要求できますが、Request、Clear CacheまたはName/Value引数は許可されません。

   - URLアクセスなし: URLを使用してページにアクセスできませんが、ページは、URLリダイレクトを行わない「ページにブランチ」ブランチ・タイプのターゲットにできます。

6. 「アイテム・タイプ」で、「データ・エントリ・アイテム」または「表示専用アイテム」を選択します。

   データ・エントリ・アイテムは、フォームを使用して変更できるアイテムであり、非表示アイテムもこれに含まれます。表示専用アイテムはレンダリングされるだけで、フォームとともに送信されません。

7. 「データ・エントリ・アイテム」を選択した場合は、各アイテムのセッション・ステート保護レベルを選択します。

   - 制限なし: URLまたはフォームでアイテム名/値を渡して、アイテムのセッション・ステートを設定できます。URLにチェックサムは必要ありません。

   - チェックサムが必要 - アプリケーション・レベル: スキーマ固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。ユーザー・レベル・チェックサムまたはセッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: ユーザー・レベル: 作業領域、アプリケーションおよびユーザー固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。セッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: セッション・レベル: カレント・セッション固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。カレント・セッションで生成されたチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

8. 「表示専用アイテム」を選択した場合は、各アイテムのセッション・ステート保護レベルを選択します。

   - 制限なし: URLまたはフォームでアイテムの名前/値を渡して、アイテムを設定できます。URLにチェックサムは必要ありません。

   - 制限付き - ブラウザから設定できない: URLまたはPOSTDATAを使用してアイテムを変更できません。アイテムの値を内部プロセス、計算などに設定できる方法を制限する場合は、このオプションを使用します。この属性は、セッション・ステート保護が無効になっていても、常に監視されます。次の表示形式タイプについては、この属性を使用します。

     - テキストとして表示（特殊文字をエスケープし、状態は保存しない）

     - テキストとして表示（状態は保存しない）

     - テキストとして表示（LOVに基づき、状態は保存しない）

     - テキストとして表示（PL/SQLに基づき、状態は保存しない）

     - テキスト・フィールド（無効、状態を保存しない）

     - HTML表の停止および開始（ラベルのみ表示）

   - チェックサムが必要 - アプリケーション・レベル: スキーマ固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。ユーザー・レベル・チェックサムまたはセッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: ユーザー・レベル: 作業領域、アプリケーションおよびユーザー固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。セッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: セッション・レベル: カレント・セッション固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。カレント・セッションで生成されたチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

9. 「変更の適用」をクリックします。

#### アプリケーション・アイテムのセッション・ステート保護の構成

アプリケーション・アイテムのセッション・ステート保護を構成するには、次のステップを実行します。

1. 「セッション・ステート保護」ページにナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. 「共有コンポーネント」をクリックします。

   4. 「セキュリティ」で、「セッション・ステート保護」を選択します。

      「セッション・ステート保護」ページが表示されます。

2. 「アプリケーション・アイテム」アイコンをクリックします。

3. アプリケーション・アイテムを選択します。

4. 「セキュリティ」で、「セッション・ステート保護」リストから次のいずれかを選択します。

   - 制限なし: URLまたはフォームでアイテム名/値を渡して、アイテムのセッション・ステートを設定できます。URLにチェックサムは必要ありません。

   - 制限付き - ブラウザから設定できない: URLまたはPOSTDATAを使用してアイテムを変更できません。アイテムの値を内部プロセス、計算などに設定できる方法を制限する場合は、このオプションを使用します。この属性は、データ・エントリ・アイテムとして使用できないアイテムのみに適用され、セッション・ステート保護が無効になっていても常に監視されます。次の表示形式タイプのアプリケーション・アイテムについては、この属性を使用します。

     - テキストとして表示（特殊文字をエスケープし、状態は保存しない）

     - テキストとして表示（状態は保存しない）

     - テキストとして表示（LOVに基づき、状態は保存しない）

     - テキストとして表示（PL/SQLに基づき、状態は保存しない）

     - テキスト・フィールド（無効、状態を保存しない）

     - HTML表の停止および開始（ラベルのみ表示）

   - チェックサムが必要 - アプリケーション・レベル: スキーマ固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。ユーザー・レベル・チェックサムまたはセッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: ユーザー・レベル: 作業領域、アプリケーションおよびユーザー固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。セッション・レベル・チェックサムも使用できます（次の項目を参照）。現行の作業領域の別のセッションで同じアプリケーションを実行しているユーザーが生成したチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

   - チェックサムが必要: セッション・レベル: カレント・セッション固有のチェックサムを入力する場合は、URLでアイテムの名前/値を渡して、アイテムのセッション・ステートを設定できます。カレント・セッションで生成されたチェックサムを含むURLによってのみ、このアイテムを設定できるようにする場合に、このオプションを使用します。

5. 「変更の適用」をクリックします。

## ファイル・アップロード表のセキュリティ・リスクの理解

Oracle Application Expressを使用すると、ユーザーがファイルをアップロードし、アップロードしたファイルにアクセスできるアプリケーションを簡単に作成できます。データベース・ビュー`APEX_APPLICATION_FILES`では、データベース・アカウント（または作業領域）に関連付けられたファイルのみが表示されますが、データベース・アカウント（または表領域）以外のファイルおよび他のユーザーが所有しているファイルを含む、基礎となる表に格納されたファイルへのアクセスに、認証は必要ありません。Oracle Application Expressの様々なAPIを使用して、ユーザーは、この共通のファイル記憶域表にファイルを関連付ける数値IDを指定し、認証を必要とせずにアクセスできます。この表に格納されたファイルにはだれでもアクセス可能です。

ファイルのアップロードをサポートするが、このセキュリティの脆弱性を公開しないOracle Application Expressアプリケーションを実装するには、次のアドレスにあるOTNのファイル・アップロードに関するOracle Application ExpressのHow Toドキュメントを参照してください。

    http://www.oracle.com/technology/products/database/application_express/howtos/index.html

参照: ファイル参照ページ・レベル・アイテムの作成の詳細は、「ページ・アイテムとアプリケーション・アイテムの違い」および「アイテム・タイプ」を参照してください。

## 認証によるユーザー・アイデンティティの証明

認証は、ユーザーがアプリケーションにアクセスする前に、そのユーザーの本人確認を行うプロセスです。認証では、ユーザーにユーザー名とパスワードの指定を要求するか、またはデジタル証明書や保護キーを使用する可能性があります。

認証スキームを作成する場合、多くの事前構成済の認証スキームから選択するか、既存のアプリケーションから認証スキームをコピーするか、または独自のカスタム認証スキームを作成できます。

このセクションの構成は次のとおりです。

- 認証の仕組みの理解

- 認証を含めるかどうかの決定

- 事前構成済の認証スキームについて

- 認証スキームの作成

- 認証スキーム・リポジトリの使用

- アプリケーションのカレント認証スキームの表示

- アプリケーションのカレント認証スキームの変更

- 認証スキームの使用状況の表示

- 認証スキームを最初から作成する方法

### 認証の仕組みの理解

アプリケーションがユーザーとどのように対話するかを決定します。すべてのユーザーが同じ権限を持つ場合、そのユーザーはパブリック・ユーザーとみなされます。ただし、アプリケーションが各ユーザーを個別に追跡する必要がある場合は、認証方式を指定する必要があります。

認証は、アプリケーションにアクセスする各ユーザーのアイデンティティの証明を行います。多くの認証プロセスで、ユーザーはなんらかの資格証明（ユーザー名とパスワードなど）を提供する必要があります。これらの資格証明は評価され、合格または不合格のいずれかとなります。資格証明が合格した場合、ユーザーはアプリケーションにアクセスできます。不合格の場合は、アクセスが拒否されます。

ユーザーの本人確認が行われると、Application Expressエンジンが組込み置換文字列`APP_USER`の値を設定して、各ユーザーを追跡します。ユーザーがページ間をナビゲートすると、Application Expressエンジンが`APP_USER`の値を設定して、本人確認を行います。Application Expressエンジンは、各ユーザーのセッション・ステートを追跡するための重要なコンポーネントとして`APP_USER`を使用します。

プログラミングの観点では、次の構文を使用して`APP_USER`にアクセスできます。

- PL/SQLを使用する場合

      V('APP_USER')

- PL/SQLまたはSQLのいずれかのバインド変数として使用する場合

      :APP_USER

`APP_USER`を使用すると、独自のセキュリティ・チェックおよび条件付き処理を実行できます。たとえば、次の表を作成したと想定します。

    CREATE TABLE my_security_table (
      user_id   VARCHAR2(30),
      privilege VARCHAR2(30));

表を作成したら、この表にユーザー権限情報を移入して、ページ、タブ、ナビゲーション・バー、ボタン、リージョン、または、その他のコントロールやコンポーネントの表示の制御に使用できます。

参照: 「APP_USER」および「セキュリティ属性の構成」

### 認証を含めるかどうかの決定

アプリケーションを作成する場合、認証を含めるかどうかを決定する必要があります。次の選択肢があります。

- 認証不要の選択。Oracle Application Expressはすべてのユーザーの資格証明をチェックしません。アプリケーションのすべてのページには、すべてのユーザーからアクセスできます。

- 組込み認証スキームの選択。使用可能な事前構成済の認証スキームに基づいて、認証方式を作成します。選択するスキームによっては、Oracle 10giAS、Oracle Internet Directoryまたは他の外部サービスの対応するコンポーネントを構成する必要もあります。詳細は、「事前構成済の認証スキームについて」および「アプリケーションのカレント認証スキームの変更」を参照してください。

- カスタム認証スキームの作成。カスタム認証方式を作成すると、認証インタフェースを完全に制御できます。この方法を実装するには、Application Expressエンジンが各ページ・リクエストを処理する前に実行するPL/SQLファンクションを提供する必要があります。このファンクションのブール戻り値によって、Application Expressエンジンが通常どおりにページを処理するか、または失敗ページを表示するかが決まります。「認可スキームの作成」を参照してください。

### 事前構成済の認証スキームについて

事前構成済の認証スキームを選択すると、Oracle Application Expressによって、標準動作の認証およびセッション管理を行う認証スキームがアプリケーションに作成されます。次に、使用可能な事前構成済の認証スキームについて説明します。

- 公開資格証明を使用すると、ユーザー名を取得する組込みログイン・ページを使用して、自分のアプリケーションがすべてのユーザーからアクセス可能になります。これは、アプリケーションの開発中に役立ちます。

- Oracle Application Expressのアカウント資格証明は、Oracle Application Expressのユーザー・リポジトリに作成および管理された内部のユーザー・アカウント（Cookieユーザー・アカウントともいう）を参照します。この方式を使用すると、アプリケーションはこれらのアカウントに対して簡単に認証できます。詳細は、「Application Expressのアカウント資格証明」を参照してください。

- データベース・アカウント資格証明は、データベース・スキーマ・アカウントの使用を参照します。この方式を使用する場合、データベース・アカウントのユーザー名およびパスワードがユーザーを認証するために使用されます。「データベース・アカウント資格証明」を参照してください。

- LDAP資格証明の検証を行うには、使用する外部LDAP（Lightweight Directory Access Protocol）ディレクトリに関する構成パラメータを指定する必要があります。「LDAP資格証明の検証」を参照してください。

- 認証なし（DADを使用）では、DAD構成に格納された値、またはアカウント情報がDAD構成に格納されていない場合にBasic認証要求を使用して取得されたユーザー名のいずれかとして、データ・アクセス記述子（DAD）からユーザー名が取得されます。「DAD資格証明の検証」を参照してください。

- Oracle Application Server Single Sign-On（パートナ・アプリケーションとしてのApplication Expressエンジン）は、Oracle AS Single Sign-On（SSO）Serverに認証を委譲します。この認証スキームを使用するには、サイトは、SSO Serverにパートナ・アプリケーションとして登録されている必要があります。詳細は、管理者に連絡してください。「シングル・サインオン・サーバーの検証について」を参照してください。

- Oracle Application Server Single Sign-On（パートナ・アプリケーションとしてのMy application）は、SSO Serverに認証を委譲します。SSOには、アプリケーションをパートナ・アプリケーションとして登録する必要があります。詳細は、「シングル・サインオン・サーバーの検証の概要」を参照してください。

#### Application Expressのアカウント資格証明

Application Expressのアカウント資格証明の認証は、Oracle Application Expressのユーザー・リポジトリに作成および管理された内部のユーザー・アカウント（Cookieユーザー・アカウントともいう）を使用します。

参照: 「Application Expressユーザーの管理」

Application Expressのアカウント資格証明は次のような場合に有効です。

- ユーザー・アカウント・リポジトリを制御する場合

- ユーザー名およびパスワードに基づいたセキュリティで十分な場合

- シングル・サインオン・フレームワークへの統合が不要な場合

この方法は特に、ユーザー・グループを新しいアプリケーションで迅速に起動および実行する必要がある場合に適しています。

#### データベース・アカウント資格証明

データベース・アカウント資格証明では、データベース・ユーザー（スキーマ）はユーザーを認証するローカル・データベースに存在している必要があります。この方法を使用する場合、ユーザーの認証にデータベース・アカウントのユーザー名およびパスワードが使用されます。

適用可能なアプリケーションの指定したユーザーごとに1つのデータベース・アカウントを持ち、ニーズに対応したデータベース・ツールによるアカウントのメンテナンスを行う場合に、データベース・アカウント資格証明は有効です。

#### LDAP資格証明の検証

ログイン・ページを使用する認証スキームは、Lightweight Directory Access Protocol（LDAP）を使用して、ログイン・ページで送信されるユーザー名およびパスワードを検証するように構成できます。アプリケーション・ビルダーには、このオプションの構成方法を示すウィザードと編集ページが含まれています。これらのウィザードでは、この構成のために、ご使用のアプリケーションにアクセス可能なLDAPディレクトリがすでに存在していることと、LDAPディレクトリが資格証明の検証の`SIMPLE_BIND_S`コールに応答できることを想定しています。LDAP資格証明の認証スキームを作成する場合、ウィザードによってLDAPホスト名、LDAPポート、DN文字列が要求され保存されます。オプションの事前処理ファンクションを指定して、APIに渡されるユーザー名の書式設定を調整できます。

#### DAD資格証明の検証

データベース・アクセス記述子（DAD）では、Oracle Database固有の認証と、Basic認証スキームを使用してユーザーを認証するユーザー・メカニズムを使用します。DAD資格証明の検証を使用するには、次の条件を満たしている必要があります。

- 各アプリケーション・ユーザーが、Oracle Databaseにユーザー・アカウントを持っている。

- Basic認証用のPL/SQL DADを構成している（アカウント情報なし）。

  これによって、アプリケーション・ユーザーは、ブラウザ・セッションごとに1回ユーザー名/パスワードを要求されます。その後、ユーザー・アイデンティティ・トークンが`APP_USER`アイテム内で使用可能になります。

DADデータベース認証は、管理可能な数のユーザーに対して最小限の設定のみが必要な認証方式を実装する場合に役立ちます。これらのユーザーがすでにデータベース内に自己管理されたアカウントを持っており、この認証方式を短期間（たとえば、開発のデモンストレーションまたはプロトタイプ段階の間）のみ使用することが理想です。

この方法の主なデメリットは、特にユーザーが自分のパスワードを管理していないか、またはユーザーのデータベース・アカウントがアプリケーションへの認証を容易化するためのみに存在している場合に、アカウントのメンテナンスが負担となることです。

#### シングル・サインオン・サーバーの検証の概要

Oracle Application Server Single Sign-On資格証明は、Oracle AS Single Sign-On（SSO）Serverに認証を委譲します。この認証スキームを使用するには、サイトは、SSO Serverにパートナ・アプリケーションとして登録されている必要があります。詳細は、管理者に連絡してください。

Oracle Application Expressアプリケーションは、Oracle Application ServerのSingle Sign-On （SSO）インフラストラクチャでパートナ・アプリケーションとして実行できます。実行には、パートナ・アプリケーションとして、アプリケーション（またはApplication Expressエンジン）を登録する必要があります。アプリケーションまたはApplication Expressエンジンをパートナ・アプリケーションとして登録するには、Oracle Application Serverのパートナ・アプリケーションの登録ステップに従い、Oracle 9iAS SSO Software Developer Kit（SDK）をインストールします。

この方法を選択する場合、ご使用のアプリケーションでは統合されたログイン・ページが使用されません。かわりに、ユーザーが新しいブラウザ・セッションでアプリケーションにアクセスすると、Application ExpressエンジンによってSingle Sign-Onログイン・ページにリダイレクトされます。ユーザーがSSOによって認証されると、SSOコンポーネントはアプリケーションにリダイレクトし、Application Expressエンジンにユーザー・アイデンティティおよびその他の情報を渡します。その後、ユーザーはログオフするか、ブラウザ・セッションを終了するか、またはその他のセッション終了イベントが発生するまでアプリケーションを使用できます。

### 認証スキームの作成

認証スキームを作成するには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. アプリケーションのホームページで、「共有コンポーネント」をクリックします。

   共有コンポーネント・ページが表示されます。

4. 「セキュリティ」で、「認証スキーム」を選択します。

   「認証スキーム」ページが表示されます。

5. 新しい認証スキームを作成するには、「作成」をクリックします。

6. 次のいずれかの項目を選択して、スキームの作成方法を指定します。

   - 事前構成済の認証スキームに基づいて

   - 既存の認証スキームのコピーとして

   - 最初から

7. 画面に表示されるステップに従います。

参照: 「事前構成済の認証スキームについて」および「認証スキームを最初から作成する方法について」

### 認証スキーム・リポジトリの使用

認証スキームを作成すると、使用可能な認証スキームが認証スキーム・リポジトリに表示されます。

認証スキーム・リポジトリにナビゲートするには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. アプリケーションのホームページで、「共有コンポーネント」をクリックします。

   共有コンポーネント・ページが表示されます。

4. 「セキュリティ」で、「認証スキーム」を選択します。

   「認証スキーム」ページが表示されます。「ビュー」リストから選択して、ページの外観を変更できます。使用可能なオプションは次のとおりです。

   - アイコン（デフォルト）: 各認証スキームを大きいアイコンとして表示します。認証スキームを編集するには、該当するアイコンをクリックします。

   - 詳細: 各アプリケーション・アイテムをレポートに1行で表示します。

     「詳細」ビューでは、次の操作を実行できます。

     - スキーム名を選択して、認証スキームを編集する。

     - 「表示」アイコンをクリックして、各ページで実行されるステップのリストを表示する。

     - 「カレントにする」リンクをクリックして、認証スキーマをアプリケーションに適用する。

### アプリケーションのカレント認証スキームの表示

アプリケーションのカレント認証スキームを表示するには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. 「共有コンポーネント」をクリックします。

4. 「セキュリティ」で、「セキュリティ属性の編集」をクリックします。

5. 「認証」セクションに移動します。カレント認証スキームが「認証スキーム」の横に表示されます。

6. 認証スキーム・ページにリンクして、スキーム名を選択するには、次のステップを実行します。

### アプリケーションのカレント認証スキームの変更

アプリケーションの認証スキームを変更するには、次のステップを実行します。

1. 「認証スキーム」にナビゲートします。

   1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

   2. アプリケーションを選択します。

   3. アプリケーションのホームページで、「共有コンポーネント」をクリックします。

      共有コンポーネント・ページが表示されます。

   4. 「セキュリティ」で、「認証スキーム」を選択します。

2. ページの上部の「カレントの変更」タブをクリックします。

3. 新しい認証スキームを選択し、「次へ」をクリックします。

4. 「カレント化」をクリックします。

### 認証スキームの使用状況の表示

認証スキーム・レポートには、現行の作業領域におけるすべてのアプリケーションについて、認証スキームの使用状況がリストされます。

認証スキーム・レポートを表示するには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

   アプリケーションのホームページが表示されます。

3. 「タスク」リストで「アプリケーション・レポートの表示」をクリックします。

4. 「クロス・アプリケーション・レポート」をクリックします。

5. 「認証スキーム」を選択します。

6. アプリケーションIDをクリックして、該当するアプリケーションのホームページにリンクします。

### 認証スキームを最初から作成する方法

認証スキームを最初から作成すると、認証インタフェースを完全に制御できます。これは、次のいずれかに該当する場合に最適な方法です。

- データベース認証または他の方式が適切でない。

- 独自のログイン・フォームおよび関連方式を開発する必要がある。

- Oracle 10gAS Single Sign-Onなどの外部サービスに対して、ユーザー認証のすべての設定を委譲する必要がある。

- セッション管理のセキュリティ面を制御する必要がある。

- ユーザー・レベルまたはセッション・レベルでアクティビティを記録または監査する必要がある。

- セッションのアクティビティ制限または存続期限を施行する必要がある。

- Oracle Application Expressページ・プロセスの前に一方向の条件付きリダイレクト・ロジックをプログラムする必要がある。

- 一般的なセッション管理フレームワークを使用して、アプリケーションをOracle Application Express以外のアプリケーションと統合する必要がある。

- アプリケーションが、シームレス（たとえば、複数のアプリケーションID）に動作する複数のアプリケーションで構成されている。

参照: 詳細は、「APEX_CUSTOM_AUTH」を参照してください。

#### セッション管理セキュリティについて

Oracle Application Expressは、カスタム認証を実行する際に、次の2つの不適切な状況が発生しないようにします。

- あるユーザーが、他のユーザーに属するセッション・ステートに故意にアクセスしようとすること。ただし、ユーザーは任意のアプリケーション・セッションIDをURLに入力できます。

- 失効したセッション・ステート（多くの場合、同じユーザーに属する以前のセッション・ステート）が不注意にアクセスされること。これは一般的に、アプリケーション・ページへのブックマークを使用したために発生します。

Oracle Application Expressは、カスタム認証ファンクションによって設定されたユーザー・アイデンティティ・トークンが、アプリケーション・セッションが最初に作成された際に記録されたユーザー・アイデンティティと一致するかどうかを確認します。ユーザーがまだ認証されておらず、ユーザー・アイデンティティが認識されていない場合、アクセスをしているセッション・ステートは、他のユーザーに属していません。これらの確認によって、リクエスト内のセッションIDが使用可能かどうかが判断されます。セッションIDが使用不可能な場合、Application Expressエンジンは適切なセッションIDを使用して、同じページにリダイレクトします。

#### ログイン・ページの構築

Oracle Application Expressで新しいアプリケーションを作成すると、ログイン・ページが作成されます。ページの別名は、`LOGIN`です。このページは、認証スキームで無効なセッション・ページとして使用できます。このページは、Oracle Application ExpressのログインAPIをコールするプロセスを使用して、資格証明の検証およびセッションの登録を実行するように構成されています。

事前に構築されたモデル・ページを使用して、すべてのユーザー・インタフェースを調整し、要件に対してロジックを加工して、独自のログイン・ページを構築することもできます。

アプリケーションのログイン・ページを作成するには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. 「ページの作成」をクリックします。

4. 「ログイン・ページ」を選択します。

5. ログイン・ページ属性を指定して、「作成」をクリックします。

#### ディープ・リンクの概要

ディープ・リンクは、コンテキスト外（たとえば、電子メールのハイパーリンクまたはワークフロー通知から）のOracle Application Expressページにリンクする機能を指します。コンテキスト外のページにリンクし、そのアプリケーションでユーザー認証が必要な場合、ログイン・ページが表示されます。資格証明の検証後、Application Expressエンジンは元のリンクで参照されていたページを自動的に表示します。ディープ・リンクは、認証スキームを使用するアプリケーションに対してサポートされます。

## 認可を介したセキュリティの提供

認可は、ユーザー権限に基づいてリソースへのアクセスを制御することを示す広義語です。条件は特定のページ・コントロールまたはページ・コンポーネントのレンダリングおよび処理を制御しますが、認可スキームは特定のコントロールまたはコンポーネントへのユーザーのアクセスを制御します。

このセクションの構成は次のとおりです。

- 認可スキームの動作方法

- 認可スキームの作成

- アプリケーション、ページまたはコンポーネントへの認可スキームの割当て

- 認可レポートの表示

### 認可スキームの動作方法

認可スキームは、アプリケーションの認証スキームのセキュリティを強化します。認可スキームは、アプリケーション全体、各ページ、またはリージョン、アイテム、ボタンなどの特定のコントロールに対して指定できます。たとえば、認可スキームを使用して、ユーザーに表示するタブ、リージョンまたはナビゲーション・バーを選択的に決定できます。

認可スキームの結果は、成功または失敗のいずれかです。コンポーネントまたはコントロール・レベルの認可スキームに成功すると、そのコンポーネントまたはコントロールがユーザーに表示されます。失敗すると、そのコンポーネントまたはコントロールはユーザーに表示されません。アプリケーション・レベルまたはページ・レベルの認可スキームに失敗すると、Oracle Application Expressは事前定義済のメッセージを表示します。

認可スキームを定義する場合は、一意の名前を指定します。定義した認可スキームは、アプリケーションのコンポーネントまたはコントロールに割り当てることができます。アプリケーションのコンポーネントまたはコントロールに認可スキームを割り当てるには、該当する属性ページにナビゲートして、「認可スキーム」リストから認可スキームを選択するのみです。

### 認可スキームの作成

認可スキームは、アプリケーションまたはアプリケーション・コンポーネントまたはコントロールに割り当てる前に作成する必要があります。

認可スキームを作成するには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. アプリケーションのホームページで、「共有コンポーネント」をクリックします。

   共有コンポーネント・ページが表示されます。

4. 「セキュリティ」で、「認可スキーム」を選択します。

5. 「作成」をクリックします。

6. 次のいずれかの項目を選択して、認可スキームの作成方法を指定します。

   - 最初から

   - 既存の認可スキームのコピーとして

7. 画面に表示されるステップに従います。

#### 既存の認可スキーム属性の編集

既存の認可スキームの属性を編集するには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. アプリケーションのホームページで、「共有コンポーネント」をクリックします。

   共有コンポーネント・ページが表示されます。

4. 「セキュリティ」で、「認可スキーム」を選択します。

   「認可スキーム」ページが表示されます。デフォルトでは、各スキームがアイコンとして表示されます。

5. すべてのスキームの詳細ビューにアクセスするには、「ビュー」リストから「詳細」を選択します。

   「認可スキーム」ページが表示されます。「ビュー」リストから選択して、ページの外観を変更できます。使用可能なオプションは次のとおりです。

   - アイコン（デフォルト）: 各認証スキームを大きいアイコンとして表示します。認可スキームを編集するには、該当するアイコンをクリックします。

   - 詳細: 各アプリケーション・アイテムをレポートに1行で表示します。認可スキームを編集するには、スキーム名を選択します。

#### 評価ポイント属性

評価ポイント属性に、認可スキームを検証するタイミングを指定できます。認可スキームをセッションごとに1回検証するか、またはページ・ビューごとに1回検証するかを選択できます。

認可スキームがセッションごとに1回評価されるように指定して、その認可スキームが合格した場合、基礎となるコード、テストまたは問合せは、そのアプリケーション・セッション中に再実行されないことに注意してください。認可スキームが、セッション中の異なる時刻に評価されると結果が異なる可能性があるテストで構成されている場合、評価ポイントをページ・ビューごとに1回に指定する必要があります。

#### 認可スキーム・ステートのリセット

認可スキームがセッションごとに1回検証される場合、Oracle Application Expressは各ユーザーのセッション・キャッシュ内に検証結果をキャッシュします。セッションの認可スキーム・ステートは、`APEX_UTIL.RESET_AUTHORIZATIONS` APIをコールしてリセットできます。

このプロシージャをコールすると、カレント・セッションに対して以前にキャッシュされた認可スキームの結果がNULLになります。このプロシージャは引数を取らず、パブリックに実行可能な`APEX_UTIL`パッケージの一部であることに注意してください。

参照: 「RESET_AUTHORIZATIONSプロシージャ」

### アプリケーション、ページまたはコンポーネントへの認可スキームの割当て

作成した認可スキームは、アプリケーション全体、ページ、コントロールまたはコンポーネントに割り当てることができます。

このセクションの構成は次のとおりです。

- アプリケーションへの認可スキームの割当て

- ページへの認可スキームの割当て

- コントロールまたはコンポーネントへの認可スキームの割当て

#### アプリケーションへの認可スキームの割当て

認可スキームをアプリケーションに割り当てるには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. 「共有コンポーネント」アイコンをクリックします。

   共有コンポーネント・ページが表示されます。

4. 「セキュリティ」で、「セキュリティ属性の編集」をクリックします。

5. 「認可」までスクロールして、「認可スキーム」リストから認可スキームを選択します。

#### ページへの認可スキームの割当て

認可スキームをページに割り当てるには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. ページを選択します。

4. 「ページ・レンダリング」で、ページのタイトルのセクションを探します。

   pg_def_edit_pg_att.gifの説明

5. 「ページ属性の編集」アイコンをクリックします。

6. 「セキュリティ」までスクロールして、「認可スキーム」リストから認可スキームを選択します。

#### コントロールまたはコンポーネントへの認可スキームの割当て

認可スキームをページ・コンポーネントまたはコントロールに割り当てるには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. ページを選択します。

4. 認可スキームを適用するコンポーネントまたはコントロールの名前をクリックします。

5. 「セキュリティ」までスクロールして、「認可スキーム」リストから認可スキームを選択します。

### 認可レポートの表示

認可スキームのサブスクリプションおよび認可スキームの使用率レポートを使用すると、アプリケーション内の認可スキームをより効率的に管理できます。

認可スキーム・レポートを表示するには、次のステップを実行します。

1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

2. アプリケーションを選択します。

3. アプリケーションのホームページで、「共有コンポーネント」をクリックします。

   共有コンポーネント・ページが表示されます。

4. 「セキュリティ」で、「認可スキーム」を選択します。

5. ページ上部の該当するタブをクリックします。

   - サブスクリプション

   - 使用状況

#### サブスクリプション

認可スキームのサブスクリプション・レポートを使用して、認可スキームのサブスクリプションの詳細を表示します。

#### 使用状況

認可スキームの使用率レポートを使用して、認可スキームの使用率の詳細を表示します。

ページの認可スキームの有無を示す詳細レポートを表示するには、「タスク」リストから次のいずれかを選択します。

- 認可スキームが指定されているレポート・ページ

- 認可スキームが指定されていないレポート・ページ