Externe Anrufe mit einem vom Kunden verwalteten Wallet tätigen

Wenn sich Ihre Autonomous Database-Instanz auf einem privaten Endpunkt befindet, können Sie ein vom Kunden verwaltetes Wallet mit Prozeduren in UTL_HTTP, DBMS_LDAP, UTL_SMTP oder UTL_TCP verwenden. Sie können auch ein vom Kunden verwaltetes Wallet verwenden, wenn der Scheduler SMTP-E-Mail-Benachrichtigungen für verschiedene Ereignisse im Zusammenhang mit Scheduler-Jobs sendet.

Vom Kunden verwaltetes Wallet mit externen Aufrufen verwenden

Wenn sich Ihre Autonomous Database-Instanz auf einem privaten Endpunkt befindet, können Sie ein vom Kunden verwaltetes Wallet verwenden, um externe Aufrufe zu verarbeiten, oder mit dem Scheduler, wenn der Scheduler E-Mails für verschiedene Ereignisse im Zusammenhang mit Scheduler-Jobs sendet.

In Autonomous Database können Sie externe Aufrufe für einen der folgenden Zwecke ausführen:

  • Zur Verwendung von Webservices mit UTL_HTTP.

  • Zum Zugriff auf Daten von LDAP-Servern mit DBMS_LDAP.

  • E-Mail an UTL_SMTP senden.

  • Kommunikation mit externen TCP/IP-basierten Servern über TCP/IP mit UTL_TCP.

  • Für Oracle Scheduler-Job-E-Mail-Benachrichtigungen.

Wenn Sie Prozeduren in diesen Packages verwenden, verwaltet Autonomous Database standardmäßig ein internes Wallet und verwendet immer sichere Verbindungen. (Das von Oracle verwaltete Wallet enthält mehr als 90 der gängigsten vertrauenswürdigen Root- und Zwischen-SSL-Zertifikate.) Wenn sich Ihre Autonomous Database auf einem privaten Endpunkt befindet, haben Sie die Möglichkeit, das von Oracle verwaltete Standard-Wallet mit den vertrauenswürdigen und intermediären SLL-Zertifizierungen zu verwenden, oder Sie können ein vom Kunden verwaltetes Wallet bereitstellen.

Wenn sich Ihre Autonomous Database auf einem privaten Endpunkt befindet, können Sie ein vom Kunden verwaltetes Wallet für UTL_HTTP, UTL_SMTP, DBMS_LDAP und DBMS_NETWORK_ACL_ADMIN mit den folgenden PL/SQL-Prozeduren angeben:

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

Verwenden Sie bei diesen Aufrufen je nach Prozedur entweder den Parameter path oder wallet_path, um ein vom Kunden verwaltetes Wallet anzugeben. Sie legen das Wallet-Verzeichnis mit dem Präfix DIR: fest und fügen einen Wallet-Pfad hinzu. Beispiel:

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

Der aktuelle Benutzer, der die API aufruft, muss über READ-Berechtigungen für das Verzeichnisobjekt verfügen oder die Systemberechtigung CREATE ANY DIRECTORY erhalten.

Das Präfix DIR: ist das bevorzugte Formular zur Angabe eines vom Kunden verwalteten Wallets. Darüber hinaus wird das Präfix file: unterstützt. Beispiel:

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

Weitere Informationen finden Sie unter Von Kunden verwaltetes Wallet für externe Aufrufe mit UTL_HTTP verwenden:

Vom Kunden verwaltetes Wallet mit Scheduler Email Server verwenden

Der Scheduler-E-Mail-Server ist zum Senden von E-Mail-Benachrichtigungen für verschiedene Ereignisse im Zusammenhang mit dem Scheduler verfügbar, wie z.B. Benachrichtigung über gestartete, nicht erfolgreiche oder abgeschlossene Jobs. Standardmäßig verwendet der SMTP-E-Mail-Server des Schedulers das in der Eigenschaft SSL_WALLET definierte Wallet für SSL/TLS-Kommunikationen. Optional können Sie ein vom Kunden verwaltetes Wallet mit dem SMTP-E-Mail-Server des Schedulers verwenden.

Die folgenden globalen Attribute werden mit einem vom Kunden verwalteten Wallet unterstützt:

  • EMAIL_SERVER_WALLET_DIRECTORY: wird auf ein Verzeichnisobjekt gesetzt, das den Pfad für das SSL-Wallet angibt.

  • EMAIL_SERVER_WALLET_CREDENTIAL: ist auf ein Zugangsdatenobjekt mit einem Paar aus Benutzername/Kennwort gesetzt, wobei der Benutzername ein beliebiger Wert und das Kennwort das SSL-Wallet-Kennwort ist.

Sie legen Werte für diese Attribute mit DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE fest.

In den folgenden Themen finden Sie weitere Informationen:

Voraussetzungen für die Verwendung eines vom Kunden verwalteten Wallets mit externen Aufrufen

Zeigt die erforderlichen Schritte zur Verwendung eines vom Kunden verwalteten Wallets mit externen Aufrufen oder mit Scheduler-SMTP-E-Mail-Benachrichtigungen an.

Führen Sie die erforderlichen Schritte aus:

  1. Prüfen Sie, ob die Autonomous Database-Instanz mit einem privaten Endpunkt konfiguriert ist.

    Weitere Informationen finden Sie unter Netzwerkzugriff mit privaten Endpunkten einrichten.

  2. Setzen Sie den Parameter private_target auf den Wert TRUE, wenn Sie die erforderlichen ACLs mit dbms_network_acl_admin.append_wallet_ace erteilen oder ROUTE_OUTBOUND_CONNECTIONS auf den Wert PRIVATE_ENDPOINT setzen.
  3. Rufen Sie ein vom Kunden verwaltetes Wallet ab, oder erstellen Sie es.

    Beispiel: So erstellen Sie ein Wallet mit 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: ********

    Weitere Informationen finden Sie unter Public Key Infrastructure-(PKI-)Elemente verwalten.

  4. Speichern Sie das Wallet in einem Bucket im Cloud-Objektspeicher.

    Nachdem Sie das vom Kunden verwaltete Wallet mit selbstsignierten Zertifikaten abgerufen oder erstellt haben, speichern Sie das Wallet an einem Speicherort in Ihrem Cloud Object Storage.

Vom Kunden verwaltetes Wallet für externe Aufrufe mit UTL_HTTP verwenden

Wenn sich Ihre Autonomous Database-Instanz auf einem privaten Endpunkt befindet, können Sie mit einem vom Kunden verwalteten Wallet externe Aufrufe verarbeiten.

Diese Schritte beschreiben die Verwendung eines vom Kunden verwalteten Wallets mit UTL_HTTP. Die Schritte für die anderen unterstützten Packages sind identisch, einschließlich: DMBS_LDAP, UTL_SMTP und UTL_TCP.

Führen Sie die erforderlichen Schritte aus, um ein vom Kunden verwaltetes Wallet zu verwenden. Weitere Informationen finden Sie unter Voraussetzungen für die Verwendung eines vom Kunden verwalteten Wallets mit externen Aufrufen.

So konfigurieren Sie eine Autonomous Database für die Verwendung eines vom Kunden verwalteten Wallets:

  1. Erstellen Sie Zugangsdaten mit DBMS_CLOUD.CREATE_CREDENTIAL, um auf Cloud Object Storage zuzugreifen.
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'user1@example.com',
        password => 'password'
      );
    END;
    /

    Die Werte, die Sie für username und password angeben, hängen vom verwendeten Cloud-Objektspeicherservice ab.

    Dadurch werden die Zugangsdaten erstellt, mit denen Sie auf den Cloud Object Storage zugreifen, in dem sich das vom Kunden verwaltete Wallet befindet.

    Das Erstellen von Zugangsdaten für den Zugriff auf den Oracle Cloud Infrastructure-Objektspeicher ist nicht erforderlich, wenn Sie Resource-Principal-Zugangsdaten aktivieren. Weitere Informationen finden Sie unter Resource Principal für den Zugriff auf Oracle Cloud Infrastructure-Ressourcen nutzen.

  2. Verwenden Sie ein vorhandenes Verzeichnis, oder erstellen Sie ein neues Verzeichnis für die Wallet-Datei.

    Beispiel:

    CREATE DIRECTORY wallet_dir AS 'directory_path_of_your_choice';
                

    Informationen zum Erstellen von Verzeichnissen finden Sie unter Verzeichnis in Autonomous Database erstellen.

  3. Mit DBMS_CLOUD.GET_OBJECT können Sie das vom Kunden verwaltete Wallet in das Verzeichnis hochladen, das Sie im vorherigen Schritt erstellt haben, WALLET_DIR.

    Beispiel:

    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;
    /

    In diesem Beispiel ist namespace-string der Oracle Cloud Infrastructure-Objektspeicher-Namespace und bucketname der Bucket-Name. Weitere Informationen finden Sie unter Object Storage-Namespaces.

  4. Erteilen Sie die erforderlichen ACLs, damit Sie die Zugangsdaten aus dem angegebenen Verzeichnis lesen können.
    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. Legen Sie den Wallet-Pfad für die Verwendung mit UTL_HTTP-Prozeduren fest.
    BEGIN
        UTL_HTTP.set_wallet('DIR:WALLET_DIR', 'password');
    END;
    /

    Um das Wallet-Verzeichnis mit UTL_HTTP.set_wallet anzugeben, können Sie entweder das Präfix dir: oder das Präfix file: verwenden.

    Das Präfix dir: ist nur in Autonomous Database verfügbar. Informationen zum Präfix file: finden Sie unter UTL_HTTP.

  6. Jetzt können Sie UTL_HTTP-Prozeduren ausführen, um mit dem vom Kunden verwalteten Wallet mit einem selbstsignierten Zertifikat auf einen Endpunkt zuzugreifen.

    Beispiel:

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

Vom Kunden verwaltetes Wallet mit Scheduler-E-Mail-Benachrichtigungen verwenden

Beschreibt die Schritte zur Verwendung des SMTP-E-Mail-Servers für den Scheduler mit einem vom Kunden verwalteten Wallet.

Führen Sie die erforderlichen Schritte aus, um ein vom Kunden verwaltetes Wallet zu verwenden. Weitere Informationen finden Sie unter Voraussetzungen für die Verwendung eines vom Kunden verwalteten Wallets mit externen Aufrufen.

So verwenden Sie ein vom Kunden verwaltetes Wallet mit dem Scheduler-E-Mail-Server:

  1. Erstellen Sie Zugangsdaten mit DBMS_CLOUD.CREATE_CREDENTIAL, um auf Ihren Cloud-Objektspeicher zuzugreifen.

    Beispiel:

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

    Die Werte, die Sie für username und password angeben, hängen vom verwendeten Cloud-Objektspeicherservice ab.

    Dadurch werden die Zugangsdaten erstellt, mit denen Sie auf Cloud Object Storage zugreifen, in dem sich das vom Kunden verwaltete Wallet befindet.

    Das Erstellen von Zugangsdaten für den Zugriff auf den Oracle Cloud Infrastructure-Objektspeicher ist nicht erforderlich, wenn Sie Resource-Principal-Zugangsdaten aktivieren. Weitere Informationen finden Sie unter Resource Principal für den Zugriff auf Oracle Cloud Infrastructure-Ressourcen nutzen.

  2. Verwenden Sie ein vorhandenes Verzeichnis, oder erstellen Sie ein neues Verzeichnis für die Wallet-Datei.

    Beispiel:

    CREATE DIRECTORY wallet_dir AS 'directory_path_of_your_choice';
                

    Informationen zum Erstellen von Verzeichnissen finden Sie unter Verzeichnis in Autonomous Database erstellen.

  3. Mit DBMS_CLOUD.GET_OBJECT können Sie das Wallet in das Verzeichnis hochladen, das Sie im vorherigen Schritt erstellt haben, WALLET_DIR.

    Beispiel:

    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;
    /

    In diesem Beispiel ist namespace-string der Oracle Cloud Infrastructure-Objektspeicher-Namespace und bucketname der Bucket-Name. Weitere Informationen finden Sie unter Object Storage-Namespaces.

  4. Führen Sie die Befehle aus, um den Scheduler so einzurichten, dass SMTP-E-Mails für Scheduler-Jobbenachrichtigungen gesendet werden.

    Beispiel:

    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;
    /

    Mit diesen Befehlen wird der SMTP-Server für Scheduler-E-Mails festgelegt, das Zugangsdatenobjekt mit den SMTP-Zugangsdaten erstellt und das Scheduler-Attribut für die SMTP-Zugangsdaten festgelegt. Außerdem wird angegeben, dass TLS für E-Mails verwendet wird, die für die Scheduler-Jobbenachrichtigung gesendet werden.

    Weitere Informationen finden Sie unter Prozedur SET_SCHEDULER_ATTRIBUTE.

  5. Erstellen Sie Zugangsdaten, um das Kennwort für das vom Kunden verwaltete Wallet zu speichern.
    BEGIN
         DBMS_CLOUD.CREATE_CREDENTIAL(
             credential_name  => 'WALLET_CRED',
             username         =>  'any_user', 
             password         => 'password');
    END;
    /

    Dadurch werden die Zugangsdaten erstellt, die Sie im nächsten Schritt zur Angabe des Kennworts für das vom Kunden verwaltete Wallet verwenden.

  6. Legen Sie das Wallet-Verzeichnis des Schedulers und die Wallet-Zugangsdaten fest.
    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. Fragen Sie die Ansicht DBA_SCHEDULER_GLOBAL_ATTRIBUTE ab, um die Werte zu prüfen, die Sie in den vorherigen Schritten festgelegt haben.
    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"

Hinweise zur Verwendung eines vom Kunden verwalteten Wallets mit externen Aufrufen

Bietet Notizen für die Verwendung eines vom Kunden verwalteten Wallets mit externen Anrufen.

  • DBMS_CLOUD-Anforderungen berücksichtigen nicht das benutzerdefinierte Wallet, das Sie mit UTL_HTTP.set_wallet festgelegt haben. Dazu gehören DBMS_CLOUD.SEND_REQUEST und der gesamte Objektspeicherzugriff für externe DBMS_CLOUD-Tabellen, die Sie mit DBMS_CLOUD.CREATE_EXTERNAL_TABLE, DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE oder DBMS_CLOUD.CREATE_HYBRID_PART_TABLE definieren. Wenn Sie eine Abfrage für eine externe Tabelle ausführen, die Sie mit einer DBMS_CLOUD-Prozedur erstellt haben, berücksichtigen die Abfragen nicht das benutzerdefinierte Wallet, das Sie mit UTL_HTTP.set_wallet festgelegt haben.

  • APEX_WEB_SERVICE-Anforderungen berücksichtigen nicht das benutzerdefinierte Wallet, das Sie mit UTL_HTTP.set_wallet festgelegt haben.

    Um ein vom Kunden verwaltetes Wallet mit APEX zu verwenden, geben Sie den Parameter p_wallet_path in APEX_WEB_SERVICE-API-Aufrufen an, oder legen Sie die Instanzeinstellung für den Wallet-Pfad in APEX Administration Services fest.

    Weitere Informationen finden Sie unter Auf Oracle APEX Administration Services zugreifen.

  • Sowohl Wallets mit automatischer Anmeldung als auch passwortgeschützte Wallets werden unterstützt. Wenn Sie ein Wallet für die automatische Anmeldung verwenden, geben Sie NULL für den Parameter wallet_password an.

  • Der aktuelle Benutzer, der die UTL_HTTP.set_wallet-API aufruft, muss über READ-Berechtigungen für das Verzeichnisobjekt verfügen oder die Systemberechtigung CREATE ANY DIRECTORY erhalten.

  • Die UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET-API ist zulässig. Weitere Informationen finden Sie unter Prozedur SET_AUTHENTICATION_FROM_WALLET.

  • Das Präfix file: wird mit UTL_HTTP.set_wallet unterstützt, solange der angegebene Dateipfad PATH_PREFIX-konform ist.

    Sie können die PATH_PREFIX-Compliance für einen Pfad bestimmen, der als Eingabe mit der Prozedur DBMS_PDB_IS_VALID_PATH bereitgestellt wird (erteilt an PUBLIC, einschließlich des Benutzers ADMIN).

    Beispiel:

    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;
    /
  • Um die Abwärtskompatibilität sicherzustellen, wenn Sie UTL_HTTP.set_wallet verwenden, werden Eingabewerte wie file:, NULL usw. akzeptiert, wenn der Wallet-Pfad ignoriert wird. Diese Werte werden ignoriert und geben an, dass der Standard-SSL-Wallet-Pfad mit UTL_HTTP.set_wallet verwendet werden soll.

  • Die DBMS_NETWORK_ACL_ADMIN-Wallet-ACL-APIs, wie APPEND_WALLET_ACL, werden unterstützt. Mit diesen Prozeduren können Sie Wallet-ACL-Berechtigungen erteilen/entziehen. Weitere Informationen finden Sie unter DBMS_NETWORK_ACL_ADMIN.

  • Um die Verwendung der Kennwortzugangsdaten in einem SSL-Wallet zur Authentifizierung zu unterstützen, muss der aktuelle Benutzer, der die UTL_HTTP-APIs aufruft, die ACL-Berechtigung "use-passwords" für den Wallet-Pfad aufweisen.

  • Hinweise zum Festlegen von EMAIL_SERVER_WALLET_DIRECTORY und EMAIL_SERVER_WALLET_CREDENTIAL mit DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE:

    • Um die Attributwerte mit DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE festzulegen, müssen Sie ein administrativer Benutzer oder ein Benutzer mit MANAGE SCHEDULER-Berechtigungen sein (der ADMIN-Benutzer verfügt über diese Berechtigungen).

    • Zusätzlich zur Berechtigung MANAGE SCHEDULER muss der Benutzer, der DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE aufruft, über die Berechtigung READ für das Verzeichnisobjekt verfügen, das Sie mit EMAIL_SERVER_WALLET_DIRECTORY festlegen, und über die Berechtigung EXECUTE für das Zugangsdatenobjekt, das Sie mit EMAIL_SERVER_WALLET_CREDENTIAL festlegen.