プライマリ・コンテンツに移動
Oracle® Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド
リリース18.1
E98591-01
目次へ移動
目次
索引へ移動
索引

前
次

20.1 セキュリティに関する管理者のベスト・プラクティスの理解

Oracle Application Express管理者のためのセキュリティのベスト・プラクティスについて学習します。

ヒント:

このセクションでは、Oracle Application Express管理サービス・アプリケーションの様々な設定について説明します。管理サービス・アプリケーションの機能は、Oracle Database Cloud Service (Database Schema)では利用できません。

20.1.1 Oracle Application Express管理者のロールについて

Oracle Application Expressには、ワークスペース管理者とインスタンス管理者の2種類の管理者が含まれています。

Oracle Application Express開発環境にアクセスするには、ユーザーはワークスペースという作業用の共有領域にログインします。ワークスペース管理者は、ユーザー・アカウントの管理、ワークスペース・アクティビティの監視、ログ・ファイルの表示など、ワークスペース固有の管理タスクを実行するユーザーです。インスタンス管理者は、Application Express管理サービス・アプリケーションを使用して、ホスティングされたインスタンス全体を管理するスーパーユーザーです。

ヒント:

インスタンス管理者のロールは、Oracle Database Cloud Service (Database Schema)では使用できません。

関連項目:

『Oracle Application Express管理ガイド』ワークスペースおよびアプリケーションの管理に関する項およびOracle Application Express管理サービスに関する項

20.1.2 Oracle Application ExpressでのOracle REST Data Servicesの構成について

Oracle Application ExpressでOracle REST Data Servicesを使用することをお薦めします。

Oracle REST Data Services (以前のOracle Oracle Application Express Listener)は、SQL*Net接続経由でブラウザ・リクエストをApplication Expressエンジン・データベースにマッピングすることによってOracle Databaseと通信するJ2EEアプリケーションです。Oracle REST Data ServicesはOracle Application Expressの戦略的方向性であり、実質的にすべての環境で使用することをお薦めします。本番環境では、Oracle Web Logic ServerなどのサポートされているJava EEアプリケーションにOracle REST Data Services Webアーカイブ・ファイルをデプロイします。各デプロイは、個別に構成し、Oracleデータベースと通信するためのmod_plsqlデータベース・アクセス記述子と同じ目的で利用できます。

Oracle REST Data Servicesのデプロイ構成には、複数のセキュリティ関連パラメータが含まれます。Oracle Application Expressの構成では、パラメータsecurity.requestValidationFunctionwwv_flow_epg_include_modules.authorizeに設定することをお薦めします。これにより、Oracle Application Expressに付属のコール可能なプロシージャのホワイト・リストがアクティブ化され、他のプロシージャへのコールが禁止されます。これは、Oracle Application Expressに付属する検証ファンクションを使用して拡張できます。

関連項目:

『Oracle Application Express管理ガイド』データベース・アクセス記述子(DAD)によるOracle Application Expressへのアクセスの制限に関する項

20.1.3 Oracle Application Expressでのmod_plsqlを使用したOracle HTTP Serverの構成について

Oracle HTTP Serverは、mod_plsqlプラグインを使用してOracle Database内のOracle Application Expressエンジンと通信します。mod_plsqlファンクションは、WebサーバーとOracle Database内のOracle Application Expressエンジン間の通信ブローカとして機能します。

ヒント:

Oracle HTTP Server 12c (12.1.3)では、mod_plsqlは非推奨となっています。この非推奨に関する詳細は、My Oracle Supportノート1576588.1を参照してください。かわりに、Oracle REST Data Servicesを使用することをお薦めします。

mod_plsqlの各リクエストは、Database Access Descriptor(DAD)というデータベースにアクセスする際に使用する一連の構成値に関連付けられます。mod_plsqlには、リクエストされたプロシージャのさらなる処理を許可または禁止することができるPlsqlRequestValidationFunctionというDADパラメータがあります。このパラメータを使用すると、DADからの実行の許可対象にしないパッケージおよびプロシージャのコールをブロックすることで、PL/SQLアプリケーションにさらに強力なセキュリティを実装できます。Oracle Application ExpressのDAD構成では、PlsqlRequestValidationFunctionディレクティブに値 wwv_flow_epg_include_modules.authorizeを使用することをお薦めします。

PlsqlRequestValidationFunctionパラメータの目的は、mod_plsqlによってどのプロシージャが起動されるかを制御することです。デフォルトでは、Oracle Application Expressのパブリックなエントリ・ポイントのみが許可されます。これは、Oracle Application Expressに付属する検証ファンクションを使用して拡張できます。

関連項目:

Oracle Application Express管理ガイドの「データベース・アクセス記述子(DAD)によるOracle Application Expressへのアクセスの制限」

20.1.4 埋込みPL/SQLゲートウェイを使用する場合のセキュリティに関する考慮事項について

埋込みPL/SQLゲートウェイは、Oracle XML DB HTTPリスナーの一部としてデータベースで実行されます。Oracle XML DB HTTPリスナーおよび埋込みPL/SQLゲートウェイには、Oracle HTTP Serverおよびmod_plsqlと同等の主要機能があります。

HTTPリスナーはOracle Application Expressがインストールされているデータベースと同じデータベースで実行されるため、データベースから分離できません。このため、インターネット上で実行されるアプリケーションまたは本番アプリケーションに埋込みPL/SQLゲートウェイを使用することはお薦めしません。かわりに、Oracle REST Data Servicesを使用することをお薦めします。また、埋込みPL/SQLゲートウェイでは、Oracle REST Data Servicesほどに柔軟な構成および詳細なログは提供されません。

20.1.5 インスタンス・セキュリティの管理

Oracle Application Expressインスタンスを管理する場合のセキュリティに関するベスト・プラクティスについて学習します。

関連項目:

『Oracle Application Express管理ガイド』のセキュリティ設定の構成に関する項

20.1.5.1 ログイン制御の作成について

管理者は、インスタンス全体に対して、または個々のワークスペースにログイン制御を構成できます。

ワークスペースの管理者および開発者は、Oracle Application Expressの開発環境にログインし、ワークスペース内で開発されたアプリケーションに対するエンド・ユーザーの認証を行うためのユーザー・アカウントを作成できます。

管理者は、インスタンス・レベルまたはワークスペースレベルでログイン制御を構成できます。たとえば、インスタンス管理者がOracle Application Express管理サービスでアカウント・ログイン制御を構成した場合、その構成は開発インスタンス全体ですべてのワークスペースの全Application Expressアカウントに適用されます。

インスタンス管理者がインスタンス全体でログイン制御を有効にしない場合は、各ワークスペース管理者がワークスペースごとに次の制御を有効にできます。

  • エンド・ユーザーのアカウント有効期限およびロック。

  • エンド・ユーザー・アカウントへのログイン試行失敗の最大回数。

  • パスワード存続期間(つまりエンド・ユーザー・アカウントのパスワードを使用できる期限が切れるまでの残りの日数)。

関連項目:

  • Oracle Application Express管理ガイドの「インスタンスに対する認証制御の構成」

  • Oracle Application Express管理ガイドの「ワークスペースに対するアカウント・ログイン制御の作成」

20.1.5.2 パブリック・ファイルのアップロードの有効化について

管理者は、「パブリック・ファイルのアップロードを許可」属性を使用して、認証されていないユーザーがファイルのアップロード機能を提供するアプリケーションでファイルをアップロードできるかどうかを制御できます

関連項目:

『Oracle Application Express管理ガイド』のパブリック・ファイルのアップロードの制御に関する項

20.1.5.3 IPアドレスによるユーザー・アクセスの制限について

管理者は、インスタンスの管理、セキュリティ・ページで「IPアドレス別にアクセスを制限」属性の許容されるIPアドレスのカンマ区切りリストを入力して、Oracle Application Expressインスタンスへのユーザー・アクセスを制限できます。

関連項目:

『Oracle Application Express管理ガイド』のIPアドレス別のユーザー・アクセスの制限に関する項

20.1.5.4 インスタンス・プロキシの指定について

管理者は、「インスタンス・プロキシ」属性を使用して、すべてのアウトバウンドHTTPトラフィックにプロキシを使用するようにOracle Application Expressインスタンス全体を構成できます。

インスタンス・レベルでのプロキシの設定は、アプリケーション・レベルまたはWebサービス参照で定義されているすべてのプロキシより優先されます。プロキシが指定されている場合、URLタイプのリージョン、Webサービスおよびレポート出力で、そのプロキシが使用されます。

関連項目:

『Oracle Application Express管理ガイド』のインスタンス用のプロキシ・サーバーの構成に関する項

20.1.5.5 Secure Sockets Layerの使用について

Secure Sockets Layer(SSL)は、インターネット上に転送されるデータのセキュリティを管理するためのプロトコルです。SSLは、HTTPSプロトコルを使用してWebアプリケーションに実装されます。機密データが暗号化されていない(クリアテキストの)通信チャネルに送信されないように、SSL (HTTPSプロトコル)を使用してOracle Application Expressアプリケーションを実行することをお薦めします。

管理者は、「HTTPSが必要」属性および「アウトバウンドHTTPSが必要」属性を構成することで、Oracle Application Expressインスタンスとすべての関連アプリケーションでHTTPSを必要とするように構成できます。これらの属性を構成すると、アプリケーション・ビルダー内の認証済ページでは、ネットワーク通信を暗号化するHTTPSを要求することが強制されます。「HTTPSが必要」オプションを変更しても、Webサーバーにはまったく影響しません。これらのオプションが意味を持つためには、HTTPSに対してWebサーバーを有効化する必要があります。HTTPSの有効化の詳細は、使用する特定のWebサーバーのドキュメントを参照してください。

「HTTPSが必要」オプションは次のとおりです。

  • 常時 - すべてのアプリケーション(Oracle Application Express開発および管理アプリケーションを含む)にHTTPSを要求するように強制します。

  • 開発および管理 - Oracle Application Express内のすべての内部アプリケーション(つまり、アプリケーション・ビルダー、SQLワークショップ、インスタンス管理など)にHTTPSを要求するように強制します。

  • アプリケーション固有 - HTTPSをアプリケーション・レベル設定依存にします。

関連項目:

『Oracle Application Express管理ガイド』の、HTTPプロトコル属性の構成に関する項

20.1.5.6 RESTfulアクセスの有効化について

管理者は、「RESTfulアクセスを許可」属性を使用して、開発者がレポート・リージョンをRESTfulサービスとして公開できるかどうかを制御できます。

関連項目:

『Oracle Application Express管理ガイド』のインスタンスのRESTfulサービスの制御に関する項

20.1.5.7 「セッションを再結合」について

「セッションを再結合」属性を使用して、Oracle Application ExpressでセッションIDを含まないURLをサポートするかどうかを制御します。

ヒント:

セキュリティ上の理由から、管理者は、ワークスペース・レベルまたはインスタンス・レベルで「ホスト名の許可」属性を構成してワークスペース分離を実装する場合を除いて、「セッションを再結合」を無効にすることをお薦めします。ワークスペースの分離についてを参照してください。

セッションの再結合を有効にすると、URLにセッションIDが含まれていない場合、Oracle Application Expressはセッションcookieを使用して既存のセッションを結合しようとします。「セッションを再結合」を使用するには、管理者はアプリケーション・レベルまたはページ・レベルで「セッションを再結合」を有効にする必要があります。「セッションを再結合」にインスタンス・レベルでより制限の多い値が設定されている場合、これによりアプリケーションおよびページ設定が上書きされます。

セッション結合のサポートは便利ですが、複数の重大なセキュリティ・リスクが存在します。

  • セッション・ステートの悪意のある変更または他の変更のトリガー

    攻撃者がユーザーにアプリケーション・リンクをクリックさせた場合に、セッション・ステートの悪意のある変更または他の変更がトリガーされる可能性があります。このリスクのため、Application Expressには、データの変更を伴うリクエスト処理のタイミングを攻撃者が推測できないチェックサムが必要です。

  • アプリケーション間の予期しない変更のトリガー

    ユーザーが同じOracle Application Expressインスタンスの個別のタブで2つのアプリケーションを開いている場合、一方のアプリケーションが他方のアプリケーションで予期しない変更をトリガーする可能性があります。攻撃側のアプリケーションはハッカーによって作成されたか、攻撃者にコードの挿入を可能にするXSS脆弱性がある場合があります。このアプリケーションは、他のアプリケーションとのユーザーの相互作用をシミュレートするAjaxコールを使用することがあります。

関連項目:

20.1.5.8 ワークスペースの分離について

ワークスペースの分離は、ブラウザ攻撃を防ぐ効果的な方法です。

ワークスペースを実際に分離する唯一の方法は、Oracle Application Express管理サービスで「ホスト名の許可」属性を構成して、URLで異なるドメインを強制することです。攻撃者と攻撃を受ける側のURLでドメインとホスト名が異なる場合、ブラウザの同一起点ポリシーによって攻撃が回避されます。

「ホスト名の許可」の構成によるワークスペースの分離は、ワークスペースの境界を越えようとするクライアント側攻撃への対策となります。このセキュリティ対策は、他のフレームワークおよび言語(Oracle Application Development Framework (ADF)やJavaなど)で作成されたアプリケーションを含むインスタンスのホストを使用してアクセスできるすべてのアプリケーションを信頼できる場合は、必要ありません。

関連項目:

  • Oracle Application Express管理ガイドの「ブラウザ攻撃を防ぐためのワークスペースの分離」

  • Oracle Application Express管理ガイドの「インスタンスのすべてのワークスペースの分離」

20.1.5.9 セッション・タイムアウトの使用について

「セッション・タイムアウト」属性を構成すると、アプリケーションの公開を抑制できます。

ユーザーは、長時間コンピュータを操作しなかったり、アプリケーションを終了せずにコンピュータの元を離れることが頻繁にあります。このため、アプリケーションのユーザー・アイデンティティが、権限のないユーザーによって簡単に引き継がれる可能性があります。セッション・タイムアウトおよびアイドル・タイムアウトを設定すると、指定したタイムアウトの後、ユーザーは自動的にアプリケーションからログアウトされます。

「セッション・タイムアウト」属性には、次のものがあります。

  • 最大セッションの長さ

  • セッション・タイムアウトURL

  • 最大セッション・アイドル時間

  • アイドル・タイムアウトURL

開発者は特定のアプリケーションのセッション・タイムアウトを構成でき、管理者はインスタンス全体のセッション・タイムアウトを構成できます。

関連項目:

  • これらの属性をアプリケーション・レベルで構成する方法の詳細は、セッション管理を参照してください。

  • Oracle Application Expressインスタンス全体でこれらの属性を構成するには、『Oracle Application Express管理ガイド』セッション・タイムアウトの構成に関する項を参照してください。

20.1.5.10 パスワードの再利用の制限

サイト管理者は、すべての管理者アカウント、開発者アカウントおよびエンド・ユーザー・アカウントに対し、そのアカウントに以前使用されたパスワードの履歴に基づいて、パスワードの再利用を制限することができます。

パスワードの再利用を制限するには、次のステップを実行します。

  1. SQL*Plusを起動して、Oracle Application Expressがインストールされたデータベースに、apex_administrator_roleロールを使用するか、SYSDBAロールを指定するSYSとして接続します。次に例を示します。
    • Windowsの場合:

      SYSTEM_DRIVE:\ sqlplus /nolog
      SQL> CONNECT SYS as SYSDBA
      Enter password: SYS_password
      
    • UNIXおよびLinuxの場合:

      $ sqlplus /nolog
      SQL> CONNECT SYS as SYSDBA
      Enter password: SYS_password
      

    ヒント:

    APEX_ADMINISTRATOR_ROLEは、別のデータベース・ロールを介さずに、ユーザーに直接付与する必要があります。

  2. 次の文を実行します。
    ALTER SESSION SET CURRENT_SCHEMA = apex_180100;
    
    
  3. 次の文を実行します。
    BEGIN
    APEX_INSTANCE_ADMIN.SET_PARAMETER('PASSWORD_HISTORY_DAYS',365);
    COMMIT;
    END;
    /

    これによって、作成または更新するパスワードは、過去365日間にそのアカウント用として使用されていないものに制限されます。以前に使用されたパスワード(実際は、パスワードのハッシュ表現)は、Oracle Application Expressをインストールしたときから記録されます。

  4. この機能を無効にするには、パラメータ値に0を指定して前述のブロックを実行します。次に例を示します。
    BEGIN
    APEX_INSTANCE_ADMIN.SET_PARAMETER('PASSWORD_HISTORY_DAYS',0);
    COMMIT;
    END;
    /
    

関連項目:

  • Oracle Application Express APIリファレンスの「APEX_UTIL.STRONG_PASSWORD_CHECKプロシージャ」

  • Oracle Application Express APIリファレンスの「APEX_UTIL.STRONG_PASSWORD_VALIDATIONファンクション」

20.1.5.11 WebシートでのSQLの使用について

SQL Webシート属性を許可属性を無効にすると、管理者は、WebシートのユーザーがSQLタグを使用して基盤となるデータベース・オブジェクトにアクセスしたり、SQLレポートを作成することを防ぐことができます。

関連項目:

『Oracle Application Express管理ガイド』のWebシートでのSQLアクセスの有効化と無効化に関する項

20.1.5.12 RESTfulサービスの有効化について

管理者は、ワークスペース・レベルまたはインスタンス・レベルでRESTfulサービスを作成してアクセスする機能を制御できます。

「RESTfulサービスを有効にする」属性を無効にすると、開発者は、Oracle REST Data Services 2.0以上とともに使用されるSQLおよびPL/SQLにマップされるRESTful Webサービスを作成および編集できなくなります。

「RESTfulサービスを有効にする」を構成するには、次のステップを実行します。

  • 「ワークスペース管理」で、Oracle Application Expressにサインインして、「管理」メニューをクリックします。「サービスの管理」「ワークスペース・プリファレンスの設定」「SQLワークショップ」を選択し、「RESTfulサービスを有効にする」属性を検索します。

  • 「インスタンス管理」で、Oracle Application Express管理サービスにサインインします。「インスタンスの設定」で、「機能構成」「機能構成」をクリックします。「REST」タブで、「RESTfulサービスを有効にする」属性を検索します。

関連項目:

  • Oracle Application Express管理ガイドの「ワークスペースのRESTfulサービスの有効化」

  • Oracle Application Express管理ガイドの「インスタンスのRESTの有効化」

20.1.6 インスタンス設定の構成

Oracle Application Expressインスタンスを構成する際のセキュリティに関するベスト・プラクティスには、ワークスペースの作成を自動化するかどうかの決定、電子メールの有効化および構成、記憶域オプションの構成およびウォレットの作成が含まれます。

関連項目:

『Oracle Application Express管理ガイド』のインスタンス設定の構成に関する項

20.1.6.1 ワークスペース作成時の自動化の有効化について

管理者は、新規ワークスペースの割当て(または作成)時に自動化の量を決定します。

割当ての動作方法を決定するには、インスタンス管理者は、インスタンスの設定ページで次のいずれかのオプションを選択します。

  • 手動 - 管理者が新しいワークスペースを作成し、ワークスペース管理者にログイン情報を手動で通知します。

  • リクエスト - ユーザーがセルフ・サービス方式で直接ワークスペースをリクエストします。

  • 電子メールの検証でのリクエスト - このモードでは、ユーザーがログイン・ページでリンクをクリックしてワークスペースを直接リクエストし、リクエスト・フォームにアクセスします。各ユーザーは、検証リンクを含む電子メールを最初に受信します。ユーザーが検証リンクをクリックすると、リクエストが処理されます。ユーザーは、この後サインイン・ページを使用してワークスペースにアクセスできます。

関連項目:

『Oracle Application Express管理ガイド』のワークスペースの作成方法の指定に関する項

20.1.6.2 電子メールの有効化および構成について

Oracle Application Expressアプリケーションから電子メールを送信するには、インスタンス管理者は電子メールSMTP設定を定義し、Oracle Database 11g R2以上に対してセキュアな接続を使用するように「SSL/TLSの使用」属性を設定する必要があります。

関連項目:

20.1.6.3 記憶域オプションの構成について

管理者は、ワークスペースや自動拡張表領域をリクエストした際に新しいスキーマを要求したり、指定日数に達したアップロード済ファイルを削除する記憶域オプションを構成できます。

関連項目:

『Oracle Application Express管理ガイド』の記憶域の構成に関する項

20.1.6.4 ウォレットの作成について

ウォレットは、SSLに必要な認証および署名された資格証明(秘密鍵、証明書および信頼できる証明書)の格納に使用されるパスワード保護されたコンテナです。次の場合は、ウォレットを作成する必要があります。

  • SSL有効URLを呼び出す(たとえば、Webサービスを起動して)場合。

  • タイプがSSL有効URLのリージョンを作成する場合。

  • 「SSL/TLSの使用」属性を「はい」に設定してセキュアSMTPを構成する場合。

  • 「認証付きSSL」を使用するように構成されたLDAP認証スキームを持つアプリケーションを使用する場合。

関連項目:

Oracle Application Express管理ガイドの「ウォレット情報の構成」

20.1.7 ワークスペースの消去設定の構成について

アクティブではないワークスペースをパージすることにより、記憶領域を節約して、システムのパフォーマンスを向上させます。

アクティブでないワークスペースは、貴重な記憶領域を消費して、システム・パフォーマンスを低下させます。「ワークスペースの消去設定」を有効にすることによって、管理者は、アクティブでないワークスペースを消去するようにOracle Application Expressを構成できます。

関連項目:

『Oracle Application Express管理ガイド』のアクティブでないワークスペースの消去に関する項

20.1.8 ワークスペース管理の理解

インスタンス管理者は、ワークスペースとスキーマの関連付けを定義できます。管理者は、ワークスペース・レベルまたはインスタンス・レベルで開発者およびユーザーを管理し、アプリケーション・ビルダー、チーム開発、SQLワークショップ、PL/SQL編集などの主要なコンポーネントへのユーザー・アクセスを制御できます。

関連項目:

『Oracle Application Express管理ガイド』の既存のワークスペースの管理に関する項

20.1.8.1 スキーマへのワークスペースの割当ての管理について

ユーザーがOracle Application Expressにログインする場合、ワークスペースという作業用の共有領域にログインします。各ワークスペースに、複数のスキーマを関連付ける(マップする)ことができます。インスタンス管理者は、必要に応じてワークスペースとスキーマ間の関連付けを定義できます。ワークスペースをスキーマに関連付けることによって、開発者はワークスペースで、スキーマ内の新規データベース・オブジェクトの作成、およびスキーマ内のデータベース・オブジェクトと相互作用するアプリケーションの構築が可能です。

関連項目:

『Oracle Application Express管理ガイド』のスキーマへのワークスペースの割当ての管理に関する項

20.1.8.2 開発者およびユーザーの管理について

管理者は、どのスキーマ固有のユーザーにアクセス権を与えるか、およびそれらのユーザーのユーザー・ロール、つまり、ユーザーがワークスペース管理者、開発者またはエンド・ユーザーであるかを定義できます。管理者は、特定のApplication Expressコンポーネントへの開発者アクセスを制限し、アカウントをロックすることもできます。Oracle Application Expressには、開発者とユーザーを管理するための2つの個別のインタフェースがあります。ワークスペース管理者はワークスペース内でユーザー・アカウントを管理し、インスタンス管理者はApplication Express開発インスタンスにわたってすべてのユーザー・アカウントを管理します。

関連項目:

  • Oracle Application Express管理ガイドの「Application Expressインスタンス間のユーザーの管理」

  • Oracle Application Express管理ガイドの「ワークスペースでのユーザーの管理」

20.1.8.3 コンポーネントの可用性の管理について

ワークスペース管理者は、開発者がオブジェクト・ブラウザからPL/SQLプログラム・ユニットを編集およびコンパイルできるかどうかを決定する、主要コンポーネント(アプリケーション・ビルダー、チーム開発、SQLワークショップ、PL/SQL編集など)へのユーザー・アクセスを制御できます。たとえば、管理者がユーザーにデータベース・コンポーネントの構築、SQL文の実行を許可し、アプリケーションの作成は許可しない場合、管理者は特定のスキーマに対する権限を持つワークスペースを定義し、ワークスペース・プリファレンスの設定ページのオプションを使用してユーザーを開発者として構成します。

関連項目:

『Oracle Application Express管理ガイド』のワークスペース・プリファレンスの構成に関する項

20.1.9 Oracle BI Publisherとの統合について

Oracle Application ExpressとOracle BI Publisherを統合する場合は、Secure Sockets Layer(SSL)を使用することをお薦めします。Oracle BI Publisherサーバー用にSSL(HTTPSプロトコル)を構成したら、ウォレットを作成して、内部管理環境設定でレポート・サーバーにHTTPSプロトコルを指定する必要があります。

関連項目:

  • Oracle Application Express管理ガイドの「ウォレット情報の構成」

  • Oracle Application Express管理ガイドの「レポート出力の構成」

20.1.10 Application Expressのランタイム環境の利点について

Oracle Application Expressのランタイム環境では本番アプリケーションを実行できますが、管理用のWebインタフェースは使用できず、これらのアプリケーションを直接開発することはできません

機密の本番Oracle Application Expressアプリケーションは、Oracle Application Expressのランタイム・インストールで実行することをお薦めします。ランタイム・インストールでは、Webベースのアプリケーション開発環境が使用されないため、アプリケーション・ビルダー、SQL Workshopおよび本番インストールに関係するユーティリティが使用できません。また、ランタイム環境に含まれるのは、アプリケーションの実行に必要なOracle Application Expressデータベース・オブジェクトおよび権限のみであるため、より堅牢な環境になります。

関連項目:

『Oracle Application Express管理ガイド』のエクスポートしたアプリケーションをランタイム環境にインストールに関する項

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

Oracle Database 11g以上のバージョンでは、アウトバウンド・メールを送信したり、Webサービスを使用したり、Oracle Application ExpressでPDFレポートの印刷を使用できるように、ネットワーク・サービスを有効にする必要があります。

20.1.11.1 ネットワーク・サービスを有効化する必要があるタイミングと理由

ネットワーク・サービスを有効化すると、Oracle Application Expressでのアウトバウンド・メールの送信、Oracle Application ExpressでのWebサービスの使用、PDFレポートの出力に対するサポートが有効になります。

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

  • Oracle Application Expressでアウトバウンド・メールを送信する。

    ユーザーはAPEX_MAILパッケージからメソッドをコールできますが、アウトバンド・メールの送信時に問題が発生します。

  • Oracle Application ExpressでWebサービスを使用する。

  • PDFレポートを印刷する。

ヒント:

このセクションで示されている例を実行するには、データベースのcompatible初期化パラメータが11.1.0.0.0以上に設定されている必要があります。デフォルトでは、11gまたは12cデータベースのパラメータは事前に適切に設定されますが、以前のバージョンから11gまたは12cにアップグレードされたデータベースのパラメータは適切に設定されない場合があります。データベース初期化パラメータの変更の詳細は、『Oracle Database管理者ガイド』Oracle Databaseの作成と構成に関する項を参照してください。

20.1.11.2 Oracle Database 12cより前の接続権限の付与

APEX_180100データベース・ユーザーに対して、任意のホストへの接続権限を付与する方法を示します。

次の例は、APEX_180100データベース・ユーザーに対して、任意のホストへの接続権限を付与する方法を示しています。この例では、Oracle Application Expressがインストールされているデータベースに、SYSDBAロールが指定されているSYSとして接続するとします。

DECLARE
  ACL_PATH  VARCHAR2(4000);
BEGIN
  -- Look for the ACL currently assigned to '*' and give APEX_180100
  -- the "connect" privilege if APEX_180100 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;
 
  IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_180100',
     'connect') IS NULL THEN
      DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
     'APEX_180100', 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',
    'APEX_180100', TRUE, 'connect');
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
/
COMMIT;

次の例は、ローカル・ネットワーク・リソースへのアクセス権について、より少ない権限を付与する方法を示しています。この例では、電子メールやレポート・サーバーなど、ローカル・ホストのサーバーへのアクセスのみを有効にします。

DECLARE
  ACL_PATH  VARCHAR2(4000);
BEGIN
  -- Look for the ACL currently assigned to 'localhost' and give APEX_180100
  -- the "connect" privilege if APEX_180100 does not have the privilege yet.
  SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
   WHERE HOST = 'localhost' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
   
  IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_180100',
     'connect') IS NULL THEN
      DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
     'APEX_180100', TRUE, 'connect');
  END IF;
  
EXCEPTION
  -- When no ACL has been assigned to 'localhost'.
  WHEN NO_DATA_FOUND THEN
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('local-access-users.xml',
    'ACL that lets users to connect to localhost',
    'APEX_180100', TRUE, 'connect');
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('local-access-users.xml','localhost');
END;
/
COMMIT;

20.1.11.3 Oracle Database 12c以上での接続権限の付与

DBMS_NETWORK_ACL_ADMINのプロシージャCREATE_ACLASSIGN_ACLADD_PRIVILEGEおよびCHECK_PRIVILEGEは、Oracle Database 12cでは非推奨です。APPEND_HOST_ACEを使用することをお薦めします。

次の例は、APEX_180100データベース・ユーザーに対して、任意のホストへの接続権限を付与する方法を示しています。この例では、Oracle Application Expressがインストールされているデータベースに、SYSDBAロールが指定されているSYSとして接続するとします。

BEGIN
    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => '*',
        ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                           principal_name => 'APEX_180100',
                           principal_type => xs_acl.ptype_db));
END;
/

次の例は、ローカル・ネットワーク・リソースへのアクセス権について、より少ない権限を付与する方法を示しています。この例では、電子メールやレポート・サーバーなど、ローカル・ホストのサーバーへのアクセスのみを有効にします。

BEGIN
    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => 'localhost',
        ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                           principal_name => 'APEX_180100',
                           principal_type => xs_acl.ptype_db));
END;
/

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

問合せを実行して無効な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を修正したら、このセクションにある最初のスクリプトを実行して、APEX_180100ユーザーにACLを適用する必要があります。