顧客管理Walletを使用した外部コールの作成

Autonomous Databaseインスタンスがプライベート・エンドポイント上にある場合、UTL_HTTPDBMS_LDAPUTL_SMTPまたはUTL_TCPのプロシージャで顧客管理ウォレットを使用できます。また、スケジューラがスケジューラ・ジョブに関連する様々なイベントに対してSMTP電子メール通知を送信するときに、顧客管理ウォレットを使用することもできます。

外部コールでの顧客管理Walletの使用について

Autonomous Databaseインスタンスがプライベート・エンドポイント上にある場合は、顧客管理ウォレットを使用して外部コールを処理するか、スケジューラがスケジューラ・ジョブに関連する様々なイベントの電子メールを送信するときにスケジューラを使用して処理できます。

Autonomous Databaseでは、次のいずれかの目的で外部コールを実行できます:

  • UTL_HTTPでWebサービスを使用するには。

  • DBMS_LDAPを使用してLDAPサーバーからデータにアクセスします。

  • UTL_SMTPで電子メールを送信する場合。

  • UTL_TCPでTCP/IPを使用して外部のTCP/IPベースのサーバーと通信します。

  • Oracle Schedulerジョブの電子メール通知の場合。

デフォルトでは、これらのパッケージでプロシージャを使用すると、Autonomous Databaseは内部ウォレットを保持し、常にセキュアな接続を使用します(Oracle管理対象ウォレットには、最も一般的な信頼できるルート証明書と中間SSL証明書の90以上が含まれます)。Autonomous Databaseがプライベート・エンドポイントにある場合、信頼できる中間SLL認定でデフォルトのOracle管理ウォレットを使用するか、顧客管理ウォレットを指定できます。

Autonomous Databaseがプライベート・エンドポイントにある場合、次のPL/SQLプロシージャを使用して、UTL_HTTPUTL_SMTPDBMS_LDAPおよびDBMS_NETWORK_ACL_ADMINの顧客管理ウォレットを指定できます:

UTL_HTTP.SET_WALLET (
   path                 IN VARCHAR2,
   password             IN VARCHAR2 DEFAULT NULL);
UTL_HTTP.REQUEST (
   wallet_path          IN VARCHAR2 DEFAULT NULL,
   wallet_password      IN VARCHAR2 DEFAULT NULL)
UTL_HTTP.REQUEST_PIECES (
   wallet_p ath         IN VARCHAR2 DEFAULT NULL,
   wallet_password      IN VARCHAR2 DEFAULT NULL,
UTL_HTTP.CREATE_REQUEST_CONTEXT (
 wallet_path            IN VARCHAR2 DEFAULT NULL,
 wallet_password        IN VARCHAR2 DEFAULT NULL)
UTL_TCP.OPEN_CONNECTION
   wallet_path          IN  VARCHAR2 DEFAULT NULL,
   wallet_password      IN  VARCHAR2 DEFAULT NULL);
UTL_SMTP.OPEN_CONNECTION
   wallet_path          IN  VARCHAR2 DEFAULT NULL,
   wallet_password      IN  VARCHAR2 DEFAULT NULL)
DBMS_LDAP.OPEN_SSL(
  sslwrl                IN VARCHAR2,
  sslwalletpasswd       IN VARCHAR2)
DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE
  wallet_path IN VARCHAR2
DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACL(
  wallet_path IN VARCHAR2

これらのコールでは、プロシージャに応じて、pathまたはwallet_pathパラメータを使用して、顧客管理ウォレットを指定します。ウォレット・ディレクトリにはDIR:接頭辞を設定し、ウォレット・パスを含めます。次に例を示します。

UTL_HTTP.set_wallet('DIR:WALLET_DIR', 'password');

APIを起動する現在のユーザーは、ディレクトリ・オブジェクトに対するREAD権限を持っているか、CREATE ANY DIRECTORYシステム権限を付与されている必要があります。

DIR:接頭辞は、顧客管理ウォレットの指定に使用する推奨形式です。また、file:接頭辞もサポートされています。次に例を示します。

UTL_HTTP.set_wallet('file:WALLET_DIR/wallet.sso', 'password');

詳細は、UTL_HTTPでの外部コールに対する顧客管理Walletの使用を参照してください:

スケジューラEメール・サーバーでの顧客管理Walletの使用について

スケジューラEメール・サーバーは、開始済、失敗または完了したジョブの通知など、スケジューラに関連する様々なイベントのEメール通知を送信するために使用できます。デフォルトでは、スケジューラのSMTP電子メール・サーバーは、SSL/TLS通信にSSL_WALLETプロパティで定義されたウォレットを使用します。オプションで、スケジューラSMTP電子メール・サーバーで顧客管理ウォレットを使用できます。

次のグローバル属性は、顧客管理ウォレットの使用をサポートしています。

  • EMAIL_SERVER_WALLET_DIRECTORY: SSLウォレットが存在するパスを指定するディレクトリ・オブジェクトに設定されます。

  • EMAIL_SERVER_WALLET_CREDENTIAL: ユーザー名/パスワードのペアを持つ資格証明オブジェクトに設定されます。ここで、ユーザー名は任意の値で、パスワードはSSLウォレット・パスワードです。

これらの属性の値は、DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTEを使用して設定します。

詳細は、次を参照してください:

外部コールで顧客管理Walletを使用するための前提条件

外部コールまたはスケジューラSMTP電子メール通知で顧客管理ウォレットを使用するための前提条件ステップを示します。

次の前提条件ステップを実行します。

  1. Autonomous Databaseインスタンスがプライベート・エンドポイントで構成されていることを確認します。
  2. dbms_network_acl_admin.append_wallet_aceを使用して必要なACLを付与する場合は、private_targetパラメータを値TRUEに設定するか、ROUTE_OUTBOUND_CONNECTIONSを値PRIVATE_ENDPOINTに設定します。
  3. 顧客管理ウォレットを取得または作成します。

    たとえば、orapkiでウォレットを作成するには、次のようにします。

    -- Create an SSL Wallet and load the Root CERTs using orapki utility
    $ORACLE_HOME/bin/orapki wallet create -wallet /u01/web/wallet -pwd ********
    $ORACLE_HOME/bin/orapki wallet add -wallet /u01/web/wallet -trusted_cert -cert MyWebServer.cer -pwd ********
    -- Store the credentials in the SSL Wallet using mkstore utility
    $ORACLE_HOME/bin/mkstore -wrl /u01/web/wallet -createCredential secret-from-the-wallet 'example@oracle.com' ********
    Enter wallet password: ********

    詳細は、公開キー・インフラストラクチャ(PKI)要素の管理を参照してください。

  4. ウォレットをクラウド・オブジェクト・ストレージのバケットに格納します。

    自己署名証明書を含む顧客管理ウォレットを取得または作成した後、ウォレットをクラウド・オブジェクト・ストレージ上の場所に格納します。

UTL_HTTPを使用した外部コールに対する顧客管理Walletの使用

Autonomous Databaseインスタンスがプライベート・エンドポイント上にある場合、顧客管理ウォレットを使用して外部コールを処理できます。

次のステップでは、UTL_HTTPでの顧客管理ウォレットの使用について説明します。このステップは、DMBS_LDAPUTL_SMTPUTL_TCPなど、サポートされている他のパッケージでも同じです。

顧客管理ウォレットを使用するには、前提条件ステップを実行します。詳細は、外部コールで顧客管理Walletを使用するための前提条件を参照してください。

顧客管理ウォレットを使用するようにAutonomous Databaseを構成するには:

  1. DBMS_CLOUD.CREATE_CREDENTIALを使用して、クラウド・オブジェクト・ストレージにアクセスするための資格証明を作成します。
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'user1@example.com',
        password => 'password'
      );
    END;
    /

    usernameおよびpasswordに指定する値は、使用しているクラウド・オブジェクト・ストレージ・サービスによって異なります

    これにより、顧客管理ウォレットが存在するクラウド・オブジェクト・ストレージへのアクセスに使用する資格証明が作成されます。

    リソース・プリンシパル資格証明を有効にする場合、Oracle Cloud Infrastructure Object Storeにアクセスするための資格証明を作成する必要はありません。詳細は、リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセスを参照してください。

  2. 既存のディレクトリを使用するか、ウォレット・ファイルの新しいディレクトリを作成します。

    たとえば:

    CREATE DIRECTORY wallet_dir AS 'directory_path_of_your_choice';
                

    ディレクトリの作成の詳細は、「Autonomous Databaseのディレクトリの作成」を参照してください。

  3. DBMS_CLOUD.GET_OBJECTを使用して、前のステップで作成したディレクトリWALLET_DIRに顧客管理ウォレットをアップロードします。

    たとえば:

    BEGIN 
        DBMS_CLOUD.GET_OBJECT(
            credential_name => 'DEF_CRED_NAME',
            object_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/cwallet.sso',
            directory_name => 'WALLET_DIR'); 
    END;
    /

    この例では、namespace-stringはOracle Cloud Infrastructureオブジェクト・ストレージ・ネームスペースで、bucketnameはバケット名です。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。

  4. 指定されたディレクトリから資格証明を読み取ることができるように、必要なACLを付与します。
    BEGIN
      dbms_network_acl_admin.append_wallet_ace(
          wallet_path => 'dir:WALLET_DIR',
          ace         => xs$ace_type(
               privilege_list => xs$name_list('use_client_certificates', 'use_passwords'),
               principal_name => 'USER_NAME',
               principal_type => xs_acl.ptype_db)
        );
    END;
    /
  5. UTL_HTTPプロシージャで使用するウォレット・パスを設定します。
    BEGIN
        UTL_HTTP.set_wallet('DIR:WALLET_DIR', 'password');
    END;
    /

    UTL_HTTP.set_walletでウォレット・ディレクトリを指定するには、dir:接頭辞またはfile:接頭辞を使用できます。

    dir:接頭辞は、Autonomous Databaseでのみ使用できます。file:接頭辞の詳細は、UTL_HTTPを参照してください。

  6. これで、UTL_HTTPプロシージャを実行して、自己署名証明書を持つ顧客管理ウォレットを使用してエンドポイントにアクセスできるようになりました。

    たとえば:

    SELECT UTL_HTTP.REQUEST('https://example.com') from dual;

スケジューラEメール通知での顧客管理Walletの使用

スケジューラSMTP電子メール・サーバーと顧客管理ウォレットを使用するステップについて説明します。

顧客管理ウォレットを使用するには、前提条件ステップを実行します。詳細は、外部コールで顧客管理Walletを使用するための前提条件を参照してください。

スケジューラEメール・サーバーで顧客管理ウォレットを使用するには:

  1. DBMS_CLOUD.CREATE_CREDENTIALを使用して、クラウド・オブジェクト・ストレージにアクセスするための資格証明を作成します。

    たとえば、次のとおりです。

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'user1@example.com',
        password => 'password'
      );
    END;
    /

    usernameおよびpasswordに指定する値は、使用しているクラウド・オブジェクト・ストレージ・サービスによって異なります

    これにより、顧客管理ウォレットが存在するクラウド・オブジェクト・ストレージへのアクセスに使用する資格証明が作成されます。

    リソース・プリンシパル資格証明を有効にする場合、Oracle Cloud Infrastructure Object Storeにアクセスするための資格証明を作成する必要はありません。詳細は、リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセスを参照してください。

  2. 既存のディレクトリを使用するか、ウォレット・ファイルの新しいディレクトリを作成します。

    たとえば、次のとおりです。

    CREATE DIRECTORY wallet_dir AS 'directory_path_of_your_choice';
                

    ディレクトリの作成の詳細は、「Autonomous Databaseのディレクトリの作成」を参照してください。

  3. DBMS_CLOUD.GET_OBJECTを使用して、前のステップで作成したディレクトリWALLET_DIRにウォレットをアップロードします。

    たとえば、次のとおりです。

    BEGIN 
        DBMS_CLOUD.GET_OBJECT(
            credential_name => 'DEF_CRED_NAME',
            object_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/cwallet.sso',
            directory_name => 'WALLET_DIR'); 
    END;
    /

    この例では、namespace-stringはOracle Cloud Infrastructureオブジェクト・ストレージ・ネームスペースで、bucketnameはバケット名です。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。

  4. コマンドを実行して、スケジューラ・ジョブ通知のSMTP電子メールを送信するスケジューラを設定します。

    たとえば、次のとおりです。

    BEGIN
        DBMS_SCHEDULER.set_scheduler_attribute('EMAIL_SERVER','smtp.email.us-ashburn-1.oci.oraclecloud.com:587');
        DBMS_CLOUD.create_credential('EMAIL_CRED', 'ocid1.user.oc1..username', 'password');
        DBMS_SCHEDULER.set_scheduler_attribute('EMAIL_SERVER_CREDENTIAL','ADMIN.EMAIL_CRED');
        DBMS_SCHEDULER.set_scheduler_attribute('EMAIL_SERVER_ENCRYPTION','STARTTLS');
    END;
    /

    これらのコマンドは、スケジューラの電子メールSMTPサーバーを設定し、SMTP資格証明を含む資格証明オブジェクトを作成し、SMTP資格証明のスケジューラ属性を設定し、スケジューラ・ジョブ通知に送信される電子メールにTLSを使用するように指定します。

    詳細は、SET_SCHEDULER_ATTRIBUTEプロシージャを参照してください。

  5. 顧客管理ウォレットのパスワードを格納する資格証明を作成します。
    BEGIN
         DBMS_CLOUD.CREATE_CREDENTIAL(
             credential_name  => 'WALLET_CRED',
             username         =>  'any_user', 
             password         => 'password');
    END;
    /

    これにより、次のステップで使用する資格証明が作成され、顧客管理ウォレットのパスワードが提供されます。

  6. スケジューラ・ウォレット・ディレクトリおよびウォレット資格証明を設定します。
    BEGIN
         DBMS_SCHEDULER.set_scheduler_attribute('EMAIL_SERVER_WALLET_DIRECTORY','WALLET_DIR'); 
         DBMS_SCHEDULER.set_scheduler_attribute('EMAIL_SERVER_WALLET_CREDENTIAL', 'ADMIN.WALLET_CRED');
    END;
    /
  7. DBA_SCHEDULER_GLOBAL_ATTRIBUTEビューを問い合せて、前のステップで設定した値を確認します。
    SELECT attribute_name, value
           FROM DBA_SCHEDULER_GLOBAL_ATTRIBUTE
           WHERE attribute_name LIKE 'EMAIL_SERVER%' ORDER BY 1, 2;
    ATTRIBUTE_NAME                 VALUE
    ------------------------------ -----------------------------------------------
    EMAIL_SERVER                   smtp.email.us-ashburn-1.oci.oraclecloud.com:587
    EMAIL_SERVER_CREDENTIAL        "ADMIN"."EMAIL_CRED"
    EMAIL_SERVER_ENCRYPTION        STARTTLS
    EMAIL_SERVER_WALLET_CREDENTIAL "ADMIN"."WALLET_CRED"
    EMAIL_SERVER_WALLET_DIRECTORY  "WALLET_DIR"

外部コールでの顧客管理Walletの使用に関するノート

外部コールで顧客管理ウォレットを使用するためのノートを提供します。

  • DBMS_CLOUDリクエストは、UTL_HTTP.set_walletで設定したカスタム・ウォレットを受け入れません。これには、DBMS_CLOUD.SEND_REQUESTおよびDBMS_CLOUD.CREATE_EXTERNAL_TABLEDBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEまたはDBMS_CLOUD.CREATE_HYBRID_PART_TABLEで定義したDBMS_CLOUD外部表に対するすべてのオブジェクト・ストレージ・アクセスが含まれます。DBMS_CLOUDプロシージャを使用して作成した外部表に対して問合せを実行すると、UTL_HTTP.set_walletで設定したカスタム・ウォレットは問合せの対象になりません。

  • APEX_WEB_SERVICEリクエストは、UTL_HTTP.set_walletで設定したカスタム・ウォレットを受け入れません。

  • 自動ログイン・ウォレットとパスワードで保護されたウォレットの両方がサポートされています。自動ログイン・ウォレットを使用する場合は、wallet_passwordパラメータにNULLを指定します。

  • UTL_HTTP.set_wallet APIを起動する現在のユーザーは、ディレクトリ・オブジェクトに対するREAD権限を持っているか、CREATE ANY DIRECTORYシステム権限を付与されている必要があります。

  • UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET APIを使用できます。詳細は、SET_AUTHENTICATION_FROM_WALLETプロシージャを参照してください。

  • file:接頭辞は、指定したファイル・パスがPATH_PREFIX準拠であるかぎり、UTL_HTTP.set_walletでサポートされます。

    DBMS_PDB_IS_VALID_PATHプロシージャ(ADMINユーザーを含むPUBLICに付与)を使用して、入力として指定されたパスのPATH_PREFIX準拠を確認できます。

    たとえば:

    with function check_path_prefix_compliance(file_path varchar2)
      return varchar2 as
    BEGIN
      if dbms_pdb_is_valid_path(file_path) then
        return 'YES';
      else
        return 'NO';
      end if;
    END;
    SELECT
      check_path_prefix_compliance('/u03/dbfs/1276CDexample/data/dpdump') as PATH_PREFIX_COMPLIANT,
      check_path_prefix_compliance('/u01/app/oracle/diag') as PATH_PREFIX_COMPLIANT
    FROM
      dual;
    /
  • UTL_HTTP.set_walletを使用するときに下位互換性を確保するために、ウォレット・パスが無視される場合は、file:NULLなどの入力値が受け入れられます。これらの値は無視され、デフォルトのSSLウォレット・パスをUTL_HTTP.set_walletとともに使用するように指定されます。

  • APPEND_WALLET_ACLなどのDBMS_NETWORK_ACL_ADMINウォレットACL APIがサポートされています。これらのプロシージャを使用すると、ウォレットACL権限を付与または取り消すことができます。詳細は、DBMS_NETWORK_ACL_ADMINを参照してください。

  • 認証用のSSLウォレットでのパスワード資格証明の使用をサポートするには、UTL_HTTP APIを起動する現在のユーザーには、ウォレット・パスに対するuse-passwords ACL権限が必要です。

  • DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTEを使用してEMAIL_SERVER_WALLET_DIRECTORYおよびEMAIL_SERVER_WALLET_CREDENTIALを設定するためのノート:

    • DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTEを使用して属性値を設定するには、管理ユーザーまたはMANAGE SCHEDULER権限を持つユーザーである必要があります(ADMINユーザーにはこれらの権限があります)。

    • MANAGE SCHEDULER権限に加えて、DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTEを起動するユーザーには、EMAIL_SERVER_WALLET_DIRECTORYで設定したディレクトリ・オブジェクトに対するREAD権限と、 EMAIL_SERVER_WALLET_CREDENTIALで設定した資格証明オブジェクトに対するEXECUTE権限が必要です。