21.1.9 Oracle Databaseでのネットワーク・サービスの有効化
Oracle APEXで、アウトバウンド・メールを送信したり、Webサービスを使用したり、BI Publisherを使用してテンプレートベースのPDFレポートの出力を使用するには、Oracle Databaseでネットワーク・サービスを有効にする必要があります。
ノート:
次は、Oracle Autonomous Databaseで実行されているAPEXインスタンスには適用されません。APEXは、追加の構成なしでインターネット経由で外部エンドポイントと通信できます。- ネットワーク・サービスを有効化するタイミングと理由
ネットワーク・サービスを有効化すると、Oracle APEXでのアウトバウンド・メールの送信、RESTサービス、REST対応SQLまたはその他のWebサービスの使用、およびレポート印刷用のリモート・サーバーの使用のサポートが有効になります。 - 接続権限の付与
- 無効なACLエラーのトラブルシューティング
問合せを実行して無効なACLエラーを特定する方法を理解します。
親トピック: セキュリティに関する管理者のベスト・プラクティスの理解
21.1.9.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管理者ガイドのデータベースの互換性レベルの指定を参照してください。
21.1.9.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;
/
21.1.9.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を適用する必要があります。