6.6 Oracle Databaseのネットワーク・サービスの有効化
Oracle APEXでアウトバウンド・メールを送信したり、Webサービスを使用したり、BI PublisherによるテンプレートベースのPDFレポートの出力を使用するには、Oracle Databaseでネットワーク・サービスを有効にする必要があります。
ノート:
次の説明は、Oracle Autonomous Databaseで実行されているAPEXインスタンスには適用されません。APEXは、追加の構成なしでインターネット経由で外部エンドポイントと通信できます。- ネットワーク・サービスを有効化する必要があるタイミングと理由
ネットワーク・サービスを有効化すると、RESTサービス、REST対応SQLまたはその他のWebサービスを使用したOracle APEXでのアウトバウンド・メールの送信、およびレポート出力におけるリモート・サーバーの使用に対するサポートが有効になります。 - 接続権限の付与
- 無効なACLエラーのトラブルシューティング
問合せを実行して、無効なACLエラーがある場合に特定する方法を理解します。
6.6.1 ネットワーク・サービスを有効化する場合と理由
ネットワーク・サービスを有効化すると、RESTサービス、REST対応SQLまたはその他のWebサービスを使用したOracle APEXでのアウトバウンド・メールの送信、およびレポート出力におけるリモート・サーバーの使用に対するサポートが有効になります。
Oracle Databaseでは、ネットワーク・サービスとの通信機能が、デフォルトで無効化されています。したがって、DBMS_NETWORK_ACL_ADMIN
パッケージを使用して、APEX_230200
データベース・ユーザーにネットワーク接続権限を付与する必要があります。これらの権限を付与しないと、次の場合に問題が発生します。
-
Oracle APEXでアウトバウンド・メールを送信する。
ユーザーは
APEX_MAIL
パッケージからメソッドをコールできますが、アウトバンド・メールの送信時に問題が発生します。 - APEXからRESTサービスおよびその他のWebサービスを使用する。
- APEXからアウトバウンドLDAPコールを実行する。
- レポート出力にリモート出力サーバーを使用する。
ノート:
APEXをアップグレードすると、以前のAPEXバージョンの構成に基づいてネットワーク・サービスが自動的に構成されます。ヒント:
このセクションで示されている例を実行するには、データベースのcompatible初期化パラメータが11.1.0.0.0
以上に設定されている必要があります。デフォルトでは、パラメータは適切に設定されていますが、11gより前のバージョンからアップグレードされたデータベースでは更新が必要な場合があります。データベース初期化パラメータの変更については、Oracle Multitenant管理者ガイドのデータベースの互換性レベルの指定を参照してください。
6.6.2 接続権限の付与
次の例では、APEX_230200
データベース・ユーザーに対してすべてのホストへの接続権限を付与する方法を示します。この例では、Oracle APEXがインストールされているデータベースに、SYSDBA
ロールが指定されているSYS
として接続するとします。
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => '*',
ace => xs$ace_type(privilege_list => xs$name_list('connect'),
principal_name => 'APEX_230200
',
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_230200
',
principal_type => xs_acl.ptype_db));
END;
/
6.6.3 無効な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_230200
ユーザーにそのACLを適用する必要があります。