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 externe Aufrufe mit einem vom Kunden verwalteten Wallet oder mit dem Scheduler verarbeiten, 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:

  • Um Webservices mit UTL_HTTP zu verwenden.

  • Für den Zugriff auf Daten von LDAP-Servern mit DBMS_LDAP.

  • Zum Senden von E-Mails mit UTL_SMTP.

  • 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 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 in 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. Beispiele:

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

Der aktuelle Benutzer, der die API aufruft, muss über READ-Berechtigungen für das Directory-Objekt 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. Beispiele:

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

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

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

Der Scheduler-E-Mail-Server ist verfügbar, um E-Mail-Benachrichtigungen für verschiedene Ereignisse im Zusammenhang mit dem Scheduler zu senden, z.B. Benachrichtigungen ü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: ist auf ein Verzeichnisobjekt festgelegt, das den Pfad angibt, in dem sich das SSL-Wallet befindet.

  • EMAIL_SERVER_WALLET_CREDENTIAL: ist auf ein Zugangsdatenobjekt mit einem Paar aus username/password gesetzt, wobei username ein beliebiger Wert und password 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 Besuchen

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

Führen Sie die erforderlichen Schritte aus:

  1. Stellen Sie sicher, dass die Autonomous Database-Instanz mit einem privaten Endpunkt konfiguriert ist.

    Weitere Informationen finden Sie unter Netzwerkzugriff mit privaten Endpunkten konfigurieren.

  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 in Cloud Object Storage.

    Nachdem Sie das vom Kunden verwaltete Wallet mit selbstsignierten Zertifikaten abgerufen oder erstellt haben, speichern Sie das Wallet in 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 externe Aufrufe mit einem vom Kunden verwalteten Wallet verarbeiten.

In diesen Schritten wird die Verwendung eines vom Kunden verwalteten Wallets mit UTL_HTTP beschrieben. Die Schritte sind für die anderen unterstützten Packages identisch, einschließlich DMBS_LDAP, UTL_SMTP und UTL_TCP.

Vorbereitende Schritte zur Verwendung eines vom Kunden verwalteten Wallets ausführen Weitere Informationen finden Sie unter Voraussetzungen für die Verwendung eines vom Kunden verwalteten Wallets mit externen Besuchen.

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

  1. Erstellen Sie mit DBMS_CLOUD.CREATE_CREDENTIAL Zugangsdaten für den Zugriff auf Cloud-Objektspeicher.
    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-Objektspeicher zugreifen, in dem sich das vom Kunden verwaltete Wallet befindet.

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

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

    Beispiele:

    CREATE DIRECTORY wallet_dir AS 'directory_path_of_your_choice';
                

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

  3. Verwenden Sie DBMS_CLOUD.GET_OBJECT, um das vom Kunden verwaltete Wallet in das Verzeichnis WALLET_DIR hochzuladen, das Sie im vorherigen Schritt erstellt haben.

    Beispiele:

    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.

    Beispiele:

    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.

Vorbereitende Schritte zur Verwendung eines vom Kunden verwalteten Wallets ausführen Weitere Informationen finden Sie unter Voraussetzungen für die Verwendung eines vom Kunden verwalteten Wallets mit externen Besuchen.

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

  1. Erstellen Sie mit DBMS_CLOUD.CREATE_CREDENTIAL Zugangsdaten für den Zugriff auf den Cloud-Objektspeicher.

    Beispiele:

    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-Objektspeicher zugreifen, in dem sich das vom Kunden verwaltete Wallet befindet.

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

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

    Beispiele:

    CREATE DIRECTORY wallet_dir AS 'directory_path_of_your_choice';
                

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

  3. Verwenden Sie DBMS_CLOUD.GET_OBJECT, um das Wallet in das Verzeichnis WALLET_DIR hochzuladen, das Sie im vorherigen Schritt erstellt haben.

    Beispiele:

    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.

    Beispiele:

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

    Diese Befehle legen den SMTP-Server für die Scheduler-E-Mail fest, erstellen das Zugangsdatenobjekt mit den SMTP-Zugangsdaten und legen das Scheduler-Attribut für die SMTP-Zugangsdaten fest und geben an, dass TLS für E-Mails verwendet werden soll, 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, mit denen Sie im nächsten Schritt das Kennwort für das vom Kunden verwaltete Wallet angeben.

  6. Legen Sie das Scheduler Wallet-Verzeichnis 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 View 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

Enthält Notizen für die Verwendung eines vom Kunden verwalteten Wallets mit externen Anrufen.

  • DBMS_CLOUD-Anforderungen entsprechen nicht dem benutzerdefinierten 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.

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

    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 Einstellung für die Wallet-Pfadinstanz in APEX Administration Services fest.

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

  • Sowohl Wallets zur automatischen Anmeldung als auch kennwortgeschützte Wallets werden unterstützt. Wenn Sie ein Wallet mit automatischer Anmeldung verwenden, geben Sie NULL als Parameter wallet_password an.

  • Der aktuelle Benutzer, der die UTL_HTTP.set_wallet-API aufruft, muss über READ-Berechtigungen für das Directory-Objekt 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 angegeben wird (erteilt an PUBLIC, einschließlich des Benutzers ADMIN).

    Beispiele:

    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 bei der Verwendung von UTL_HTTP.set_wallet sicherzustellen, werden in Fällen, in denen der Wallet-Pfad ignoriert wird, Eingabewerte wie file:, NULL usw. akzeptiert. Diese Werte werden ignoriert und geben an, dass der Standard-SSL-Wallet-Pfad mit UTL_HTTP.set_wallet verwendet werden soll.

  • Die ACL-APIs für das Wallet DBMS_NETWORK_ACL_ADMIN, wie APPEND_WALLET_ACL, werden unterstützt. Mit diesen Verfahren 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 haben.

  • 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 und die Berechtigung EXECUTE für das Zugangsdatenobjekt festlegen, das Sie mit EMAIL_SERVER_WALLET_CREDENTIAL festlegen.