Autonomous DatabaseのPL/SQLパッケージ・ノート

Autonomous DatabaseでのOracle Database PL/SQLパッケージに関するノート。

使用できないPL/SQLパッケージ

  • DBMS_DEBUG_JDWP

  • DBMS_DEBUG_JDWP_CUSTOM

  • UTL_INADDR

PL/SQLパッケージに関するノート

  • DBMS_LDAP

    • ホスト名にIPアドレスを指定することはできません。

    • 使用可能なポートのみが636です。

    • OPEN_SSLプロシージャに対するSSLWRLおよびSSLWALLETPASSWD引数は無視されます。SSLWRLプロパティのデフォルト値は、Autonomous DatabaseでアウトバウンドWebリクエストを行うためにUTL_HTTPおよびDBMS_CLOUDによって使用されるウォレットに設定されます。

    • DBMS_LDAP.SIMPLE_BIND_SおよびDBMS_LDAP.BIND_Sサブプログラムは、ディレクトリ・サーバーに対する認証を実行します。

      DBMS_LDAP.SIMPLE_BIND_SおよびDBMS_LDAP.BIND_Sサブプログラムは、引数として資格証明オブジェクトを受け入れるように変更されます。

      次に、これらの変更されたサブプログラムの使用上のノートと例を示します。

      • 変更されたSIMPLE_BIND_SおよびBIND_Sサブプログラムを使用すると、資格証明オブジェクトを渡してディレクトリ・サーバー認証を設定できます。資格証明オブジェクトはスキーマ・オブジェクトであるため、アクセスできるのは特権ユーザーのみで、資格証明を制御するためのスキーマ・レベルの権限を構成できます。スケジューラ資格証明を渡すことは、認証用のユーザー名/パスワード/キーを格納および管理するための適切でセキュアな方法です。

      • 変更されたSIMPLE_BIND_SおよびBIND_Sサブプログラムは、以前に存在していたSIMPLE_BIND_SおよびBIND_Sサブプログラムに代わる安全で便利な代替プログラムです。

        詳細は、FUNCTION simple_bind_sおよびFUNCTION bind_sを参照してください。

      • SIMPLE_BIND_SおよびBIND_S関数のCREDENTIAL引数は、ディレクトリ・サーバーに対する資格証明ベースの認証を実行するために使用されます。

      • たとえば、次のとおりです。
        • 資格証明オブジェクトの作成:

          BEGIN DBMS_CLOUD.CREATE_CREDENTIAL (
              credential_name => 'LDAP_CRED',
              username        => 'web_app_user',
              password        => 'password' );
          END;

          これにより、ユーザー名/パスワードのペアを格納する資格証明オブジェクトが作成されます。

          詳細は、CREATE_CREDENTIALプロシージャに関する項を参照してください。

          詳細は、「スケジューラ・ジョブの資格証明の指定」を参照してください。

        • DBMS_LDAP.SIMPLE_BIND_Sを起動します。

          DECLARE
                l_mail_conn DBMS_LDAP.INIT;
              BEGIN 
                l_ldap_conn   := DBMS_LDAP.INIT('ldap.example.com', 636);
                l_auth_result := DBMS_LDAP.SIMPLE_BIND_S(l_ldap_conn, 'LDAP_CRED');
                ...
          END;
          

          この例のコードは、最初にDBMS_LDAP.INIT関数を呼び出します。この関数は、LDAPサーバーとのセッションを初期化し、LDAPサーバーldap.example.comとの接続をポート番号636で確立します。SIMPLE_BIND_S関数の値l_ldap_connはLDAPセッション・ハンドルで、LDAP_CREDは資格証明名です。

        • function bind_sは、ディレクトリ・サーバーへの複雑な認証を実行します。たとえば、次のとおりです。

          DECLARE
                l_mail_conn DBMS_LDAP.INIT;
              BEGIN 
                l_ldap_conn   := DBMS_LDAP.INIT('ldap.example.com', 636);
                l_auth_result := DBMS_LDAP.BIND_S(l_ldap_conn, 'LDAP_CRED', METH => DBMS_LDAP.AUTH_SIMPLE);
                ...
          END;
          

          この例のコードは、最初にDBMS_LDAP.INIT関数を呼び出します。この関数は、LDAPサーバーとのセッションを初期化し、LDAPサーバーldap.example.comとの接続をポート番号636で確立します。BIND_S関数の値l_ldap_connはLDAPセッション・ハンドルで、LDAP_CREDは資格証明名です。METHは認証メソッドです。有効な値はDBMS_LDAP_UTL.AUTH_SIMPLEのみです。

      • スケジューラ資格証明を作成するには、DBMS_CLOUDまたはDWROLEに対するEXECUTE権限が必要です。

      • 渡された資格証明は、現在のユーザー・スキーマに存在し、有効な状態である必要があります。

      • 異なるユーザー・スキーマ内の資格証明を指すパブリック・シノニムまたはプライベート・シノニムは、シノニムが指すベース資格証明オブジェクトに対するEXECUTE権限を持っている場合、CREDENTIALパラメータの値として指定できます。詳細は、シノニムの概要を参照してください。

    • SSL/TLSは、LDAPサーバーとAutonomous Database間で発生するすべての通信に対して適用されます。

    • Autonomous Databaseインスタンスがプライベート・エンドポイントで構成されている場合、ROUTE_OUTBOUND_CONNECTIONSデータベース・パラメータを'PRIVATE_ENDPOINT'に設定して、すべての送信LDAP接続がAutonomous Databaseインスタンスのプライベート・エンドポイントVCNの送信ルールに従うように指定します。詳細は、プライベート・エンドポイントを使用したアウトバウンド接続のセキュリティの強化を参照してください。

    プライベート・エンドポイント上の接続にDBMS_LDAPを使用するには、DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACEを使用して、private_targetパラメータに値TRUEを指定します。

    ノート

    ROUTE_OUTBOUND_CONNECTIONSPRIVATE_ENDPOINTに設定した場合、このAPIではprivate_targetパラメータをTRUEに設定する必要はありません。詳細は、プライベート・エンドポイントを使用したアウトバウンド接続のセキュリティの強化を参照してください。
  • UTL_HTTP

    • IPアドレスを介した接続は許可されません。

    • Autonomous Databaseインスタンスがパブリック・エンドポイントにある場合、HTTPSのみが許可されます。Autonomous Databaseインスタンスがプライベート・エンドポイント上にある場合、HTTPS接続とHTTP_PROXY接続の両方が許可されます(HTTP接続は、パブリック・エンドポイントとプライベート・エンドポイントの両方に対して許可されません)。

    • UTL_HTTP.set_proxy APIは、Autonomous Databaseインスタンスがプライベート・エンドポイントにある場合に許可されます。

    • Autonomous Databaseインスタンスがプライベート・エンドポイント上にあり、HTTP_PROXYまたはUTL_HTTP.SET_PROXY APIを使用する場合:

      • DBMS_CLOUDリクエストは、UTL_HTTP.SET_PROXYで設定したプロキシ・サーバーを受け入れません。これには、DBMS_CLOUD.SEND_REQUESTおよびDBMS_CLOUD.CREATE_EXTERNAL_TABLEDBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEまたはDBMS_CLOUD.CREATE_HYBRID_PART_TABLEで定義したDBMS_CLOUD外部表に対するすべてのオブジェクト・ストレージ・アクセスが含まれます。

      • APEX_WEB_SERVICEリクエストは、UTL_HTTP.SET_PROXYで設定したプロキシ・サーバーを受け入れません。

    • すべてのWebサービスは保護されている必要があります。Autonomous Databaseインスタンスがパブリック・エンドポイント上にある場合、許可されるポートは443のみです。Autonomous Databaseインスタンスがプライベート・エンドポイント上にある場合、この制限は適用されません。

      Autonomous Databaseインスタンスには、最も一般的な信頼できるルート証明書と中間SSL証明書が90を超えるOracle Walletが事前構成されています。Oracle Walletは集中管理されています。自己署名SSL証明書を使用して保護されているサイトのウォレットを使用するようにUTL_HTTPを構成できます。詳細は、UTL_HTTPでの外部コールに対する顧客管理Walletの使用を参照してください。

    • SET_AUTHENTICATION_FROM_WALLETプロシージャは使用できません。

    • CREATE_REQUEST_CONTEXTREQUESTおよびREQUEST_PIECESプロシージャのWALLET_PATHおよびWALLET_PASSWORD引数は無視されます。

    • SET_CREDENTIALプロシージャのCREDENTIAL引数を使用して、資格証明オブジェクトをプロシージャへの入力として渡します。詳細は、「スケジューラ・ジョブ資格証明の指定」およびCREATE_CREDENTIALプロシージャを参照してください。

    • 資格証明オブジェクトを作成するには、DBMS_CLOUDまたはDWROLEに対するEXECUTE権限が必要です。

    • 渡された資格証明は、現在のユーザー・スキーマに存在し、有効な状態である必要があります。

    • 異なるユーザー・スキーマ内の資格証明を指すパブリック・シノニムまたはプライベート・シノニムは、シノニムが指すベース資格証明オブジェクトに対するEXECUTE権限を持っている場合、CREDENTIALパラメータの値として指定できます。詳細は、シノニムの概要を参照してください。

    • Oracle Walletの構成は変更できません。SET_WALLETプロシージャの引数はすべて無視されます。

    • Autonomous Databaseインスタンスがプライベート・エンドポイントで構成されている場合、ROUTE_OUTBOUND_CONNECTIONSデータベース・パラメータを'PRIVATE_ENDPOINT'に設定して、すべての送信UTL_HTTP接続がAutonomous Databaseインスタンスのプライベート・エンドポイントVCNのエグレス・ルールの対象となるように指定します。詳細は、プライベート・エンドポイントを使用したアウトバウンド接続のセキュリティの強化を参照してください。

  • UTL_SMTP

    • サポートされている電子メール・プロバイダは、Oracle Cloud Infrastructure Email Deliveryサービスのみです。詳細は、電子メール配信サービスの概要を参照してください。

    • ホスト名にIPアドレスを使用したメールは許可されません。

    • 使用可能なポートは25および587のみです。

    • SET_CREDENTIAL関数のCREDENTIAL引数を使用して、スケジューラ資格証明オブジェクトをファンクションへの入力として渡します。詳細は、「スケジューラ・ジョブ資格証明の指定」およびCREATE_CREDENTIALプロシージャを参照してください。

    • 資格証明オブジェクトを作成するには、DBMS_CLOUDまたはDWROLEに対するEXECUTE権限が必要です。

    • SET_CREDENTIALプロシージャのCREDENTIAL引数を使用して、資格証明オブジェクト・オブジェクトをプロシージャへの入力として渡します。詳細は、「スケジューラ・ジョブの資格証明の指定」を参照してください。

    • 渡された資格証明は、現在のユーザー・スキーマに存在し、有効な状態である必要があります。

    • 異なるユーザー・スキーマ内の資格証明を指すパブリック・シノニムまたはプライベート・シノニムは、シノニムが指すベース資格証明オブジェクトに対するEXECUTE権限を持っている場合、CREDENTIALパラメータの値として指定できます。詳細は、シノニムの概要を参照してください。

    • Autonomous Databaseインスタンスがプライベート・エンドポイントで構成されている場合、ROUTE_OUTBOUND_CONNECTIONSデータベース・パラメータを'PRIVATE_ENDPOINT'に設定して、すべての送信UTL_SMTP接続がAutonomous Databaseインスタンスのプライベート・エンドポイントVCNのエグレス・ルールの対象となるように指定します。詳細は、プライベート・エンドポイントを使用したアウトバウンド接続のセキュリティの強化を参照してください。

  • UTL_TCP

    • ホスト名にはIPアドレスを使用できません。

    • 使用可能なポート: 443 (HTTP)、25および587 (SMTP)。

    • ポート443では、許可されるのはHTTPS URLのみです。

    • OPEN_CONNECTIONプロシージャのWALLET_PATHおよびWALLET_PASSWORD引数は無視されます。WALLET_PATHおよびWALLET_PASSWORDプロパティのデフォルト値は、Autonomous DatabaseでアウトバウンドWebリクエストを行うためにUTL_HTTPおよびDBMS_CLOUDによって使用されるウォレットに設定されます。

    • SSL/TLSは、TCP/IP接続を介してすべての通信に対して適用されます。

    • Autonomous Databaseインスタンスがプライベート・エンドポイントで構成されている場合、ROUTE_OUTBOUND_CONNECTIONSデータベース・パラメータを'PRIVATE_ENDPOINT'に設定して、すべての送信UTL_TCP接続がAutonomous Databaseインスタンスのプライベート・エンドポイントVCNのエグレス・ルールの対象となるように指定します。詳細は、プライベート・エンドポイントを使用したアウトバウンド接続のセキュリティの強化を参照してください。

  • DBMS_NETWORK_ACL_ADMIN

    • IPアドレスに対するACL権限の付与は許可されません。

    • HTTP_PROXY ACLは、プライベート・エンドポイントで使用できます。

  • UTL_HTTPのエラー

    次の表に、UTL_HTTPを使用している場合のエラー・メッセージおよび考えられる原因を示します:

    Error Message 考えられる原因

    ORA-12545: Connect failed because target host or object does not exist

    ターゲット・ホストまたはオブジェクトが存在しないか、プライベートです。

    ORA-24247: network access denied by access control list (ACL)

    指定したホストのアクセス制御リスト(ACL)が見つかりませんでした。

    ORA-29024: Certificate validation failure

    ホストの証明書が存在しないか、サポートされている証明書の中にありません。

    ORA-29261: Bad argument

    渡された資格証明が無効または無効であるか、ユーザーに資格証明に対する十分な権限がありません。

  • UTL_SMTP エラー

    Error Message 考えられる原因

    ORA-29261: Bad argument

    渡された資格証明が無効または無効であるか、ユーザーに資格証明に対する十分な権限がありません。

  • DBMS_LDAP エラー

    Error Message 考えられる原因

    ORA-31400: Missing or invalid scheduler credential

    渡された資格証明がNULLまたは無効です。

詳細は、『PL/SQLパッケージおよびタイプ・リファレンス』UTL_HTTPDBMS_LDAPUTL_SMTPUTL_TCPおよびDBMS_NETWORK_ACL_ADMINを参照してください。