プライマリ・コンテンツに移動

Oracle® Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド リリース5.1 E83810-03 |
| 目次 | 索引

前 | 次 |

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

ヒント:

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

このセクションでは、Oracle Application Express管理者のためのセキュリティのベスト・プラクティスについて説明します。

トピック:

- Oracle Application Express管理者のロールについて
- Oracle Application ExpressでのOracle REST Data Servicesの構成について
- Oracle Application Expressでのmod_plsqlを使用したOracle HTTP Serverの構成について
- 埋込みPL/SQLゲートウェイを使用する場合のセキュリティに関する考慮事項について
- インスタンス・セキュリティの管理
- インスタンス設定の構成
- ワークスペースの消去設定の構成について
- ワークスペース管理の理解
- Oracle BI Publisherとの統合について
- Application Expressのランタイム環境の利点について
- Oracle Database 11g以上でのネットワーク・サービスの有効化
  Oracle Database 11g以上のバージョンでのネットワーク・サービスの有効化を理解します。

関連項目:

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

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

Oracle Application Express開発環境にアクセスするには、ユーザーはワークスペースという作業用の共有領域にログインします。Oracle Application Expressには、2種類の管理者が含まれています。

- ワークスペース管理者は、ユーザー・アカウントの管理、ワークスペース・アクティビティの監視、ログ・ファイルの表示など、ワークスペース固有の管理タスクを実行するユーザーです。

- インスタンス管理者は、Application Express管理サービス・アプリケーションを使用して、ホスティングされたインスタンス全体を管理するスーパーユーザーです。

ヒント:

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

関連項目:

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

## 19.1.2 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.requestValidationFunction`を`wwv_flow_epg_include_modules.authorize`に設定することをお薦めします。これにより、Oracle Application Expressに付属のコール可能なプロシージャのホワイト・リストがアクティブ化され、他のプロシージャへのコールが禁止されます。これは、Oracle Application Expressに付属する検証ファンクションを使用して拡張できます。

関連項目:

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

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

ヒント:

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

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

`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へのアクセスの制限」

## 19.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ほどに柔軟な構成および詳細なログは提供されません。

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

この項では、Oracle Application Expressインスタンスを管理する場合のセキュリティに関するベスト・プラクティスの概要を示します。

トピック:

- ログイン制御の作成について
- パブリック・ファイルのアップロードの有効化について
- IPアドレスによるユーザー・アクセスの制限について
- インスタンス・プロキシの指定について
- Secure Sockets Layerの使用について
- RESTfulアクセスの有効化について
- 「セッションを再結合」について
- ワークスペースの分離について
- セッション・タイムアウトの使用について
- パスワードの再利用の制限
- WebシートでのSQLの使用について
- RESTfulサービスの有効化について

関連項目:

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

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

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

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

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

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

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

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

関連項目:

『Oracle Application Express管理ガイド』のインスタンスのログイン制御の作成およびワークスペースのアカウント・ログイン制御の作成に関する項。

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

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

関連項目:

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

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

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

関連項目:

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

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

管理者は、「インスタンス・プロキシ」属性を使用して、すべてのアウトバウンドHTTPトラフィックにプロキシを使用するようにOracle Application Expressインスタンス全体を構成できます。インスタンス・レベルでのプロキシの設定は、アプリケーション・レベルまたはWebサービス参照で定義されているすべてのプロキシより優先されます。プロキシが指定されている場合、URLタイプのリージョン、Webサービスおよびレポート出力で、そのプロキシが使用されます。

関連項目:

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

### 19.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管理ガイドの「HTTPSの必要性」

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

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

関連項目:

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

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

ヒント:

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

「セッションを再結合」属性は、Oracle Application ExpressでセッションIDを含まないURLをサポートするかどうかを制御します。セッションの再結合を有効にすると、URLにセッションIDが含まれていない場合、Oracle Application Expressはセッションcookieを使用して既存のセッションを結合しようとします。

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

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

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

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

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

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

関連項目:

- ブックマークのサポートの有効化について

- ブラウザ・セキュリティ

- ページ・デザイナでのセッションの再結合の構成

- コンポーネント・ビューでのセッションの再結合の構成

- Oracle Application Express管理ガイドの「インスタンスへのセッション再結合の構成」

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

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

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

関連項目:

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

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

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

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

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

- 最大セッションの長さ

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

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

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

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

関連項目:

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

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

### 19.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_050100;

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`ファンクション」

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

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

関連項目:

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

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

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

関連項目:

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

## 19.1.6 インスタンス設定の構成

この項では、Oracle Application Expressインスタンスを構成する場合のセキュリティに関するベスト・プラクティスの概要を示します。

トピック:

- ワークスペースのセルフ・サービス割当ての有効化について
- 電子メールの有効化および構成について
- 記憶域オプションの構成について
- ウォレットの作成について

関連項目:

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

### 19.1.6.1 ワークスペースのセルフ・サービス割当ての有効化について

管理者は、新規ワークスペースの割当て(または作成)時に自動化の量を決定します。割当ての動作方法を決定するには、インスタンス管理者は、インスタンスの設定ページで次のいずれかのオプションを選択します。

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

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

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

関連項目:

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

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

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

関連項目:

- 『Oracle Application Express管理ガイド』の電子メールの構成に関する説明

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

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

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

関連項目:

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

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

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

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

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

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

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

関連項目:

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

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

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

関連項目:

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

## 19.1.8 ワークスペース管理の理解

この項では、Oracle Application Expressでワークスペースを管理する場合のセキュリティに関するベスト・プラクティスの概要を示します。

トピック:

- スキーマへのワークスペースの割当ての管理について
- 開発者およびユーザーの管理について
- コンポーネントの可用性の管理について

関連項目:

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

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

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

関連項目:

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

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

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

関連項目:

『Oracle Application Express管理ガイド』のApplication Expressインスタンスにわたるユーザーの管理およびワークスペースでのユーザーの管理に関する項

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

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

関連項目:

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

## 19.1.9 Oracle BI Publisherとの統合について

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

関連項目:

Oracle Application Express管理ガイドの「ウォレット情報の構成」および「レポート出力の構成」

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

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

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

関連項目:

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

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

Oracle Database 11g以上のバージョンでのネットワーク・サービスの有効化を理解します。

トピック:

- ネットワーク・サービスを有効化する必要があるタイミングと理由
  ネットワーク・サービスを有効化すると、Oracle Application Expressでのアウトバウンド・メールの送信、Oracle Application ExpressでのWebサービスの使用、PDFレポートの出力に対するサポートが有効になります。
- Oracle Database 12cより前の接続権限の付与
  `APEX_050100`データベース・ユーザーに対して、任意のホストへの接続権限を付与する方法を示します。
- Oracle Database 12cでの前の接続権限の付与
  `DBMS_NETWORK_ACL_ADMIN`のプロシージャ`CREATE_ACL`、`ASSIGN_ACL`、`ADD_PRIVILEGE`および`CHECK_PRIVILEGE`は、Oracle Database 12cでは非推奨です。`APPEND_HOST_ACE`を使用することをお薦めします。
- 無効なACLエラーのトラブルシューティング
  問合せを実行して無効なACLエラーを特定する方法を理解します。

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

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

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

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

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

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

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

ヒント:

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

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

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

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

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

### 19.1.11.3 Oracle Database 12cでの接続権限の付与

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

次の例は、`APEX_050100`データベース・ユーザーに対して、任意のホストへの接続権限を付与する方法を示しています。この例では、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_050100',
                               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_050100',
                               principal_type => xs_acl.ptype_db));
    END;
    /

### 19.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_050100`ユーザーにACLを適用する必要があります。