Daten beim Importieren aus Object Storage entschlüsseln

Sie können Daten aus verschlüsselten Dateien, die in Object Storage gespeichert sind, entschlüsseln und laden. Sie können auch verschlüsselte Daten in Object Storage entschlüsseln, die Sie in einer externen Tabelle verwenden.

Diese Option ist bei der Migration von einer On-Premise-Datenbank zu einer Autonomous Database nützlich, wenn die Daten in den Quelldateien verschlüsselt sind.
Hinweis

Diese Option wird nur für Object Storage-Dateien mit weniger als 4 GB unterstützt.

Diese Option gilt für die folgenden Verfahren:

  • DBMS_CLOUD.COPY_DATA

  • DBMS_CLOUD.CREATE_EXTERNAL_TABLE

  • DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE

  • DBMS_CLOUD.CREATE_HYBRID_PART_TABLE

    Für DBMS_CLOUD.CREATE_HYBRID_PART_TABLE gilt diese Option nur für die Object Storage-Dateien.

  • DBMS_CLOUD.COPY_COLLECTION

Themen

Daten mit DBMS_CRYPTO-Algorithmen entschlüsseln und laden

Zeigt die Schritte zum Entschlüsseln verschlüsselter Dateien aus Object Storage und zum Laden der Daten in eine Tabelle in Autonomous Database an (der Entschlüsselungsschritt verwendet DBMS_CRYPTO-Algorithmen).

Als Voraussetzung müssen Sie verschlüsselte Dateien haben und die Dateien in Object Storage hochladen. In diesem Beispiel wird eine CSV-Datei verwendet. Es wird davon ausgegangen, dass die Datei mit dem Algorithmus DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 verschlüsselt und in den Cloud-Objektspeicher hochgeladen wird.

Weitere Informationen zur Funktion ENCRYPT finden Sie unter ENCRYPT-Funktion.

Weitere Informationen zum Generieren eines Verschlüsselungsschlüssels finden Sie unter DBMS_CRYPTO-Betriebshinweise.

So entschlüsseln und laden Sie Daten aus Object Storage in eine vorhandene Tabelle in Autonomous Database:

  1. Melden Sie sich bei Ihrer Autonomous Database-Instanz an.

    Weitere Informationen finden Sie unter Verbindung zu Autonomous Database herstellen.

  2. Speichern Sie die Zugangsdaten für den Cloudobjektspeicher mit DBMS_CLOUD.CREATE_CREDENTIAL.

    Beispiele:

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

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

    Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.

    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.

  3. Erstellen Sie Zugangsdaten, um den Schlüssel mit DBMS_CLOUD.CREATE_CREDENTIAL zu speichern. Beispiele:
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'ENC_CRED_NAME',
        username        => 'Any_username',
        password        => 'password'
      );
    END;
    /

    Alternativ können Sie Zugangsdaten zum Speichern des Schlüssels in einem Vault erstellen. Beispiele:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name  => 'ENC_CRED_NAME',
        params           => JSON_OBJECT ('username' value 'Any_username',
                                         'region'    value 'Region',
                                         'secret_id' value 'Secret_id_value'));
    END;
    /
    Hinweis

    Der Parameter username, den Sie in den Zugangsdaten angeben, in denen der Schlüssel gespeichert ist, kann eine beliebige Zeichenfolge sein.

    Dadurch werden die Zugangsdaten ENC_CRED_NAME erstellt, bei denen es sich um Vault Secret-Zugangsdaten handelt, bei denen das Secret (Entschlüsselungs-/Verschlüsselungsschlüssel) als Secret im Oracle Cloud Infrastructure Vault gespeichert wird.

    Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.

  4. Führen Sie DBMS_CLOUD.COPY_DATA aus, und geben Sie den Verschlüsselungsalgorithmus DBMS_CRYPTO als Entschlüsselungsmethode an.
    BEGIN
     DBMS_CLOUD.COPY_DATA (
       table_name       => 'CSV_COPY_DATA',
       credential_name  => 'OBJ_STORE_CRED',
       file_uri_list    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/encrypted.csv',
       format           => json_object( 'type' value 'csv', 'encryption' value json_object('type' value DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,'credential_name' value 'ENC_CRED_NAME'))
      );
    END;
    /

    Dadurch wird die Datei ENCRYPTED.CSV im Object Storage entschlüsselt. Die Daten werden dann in die Tabelle CSV_COPY_DATA geladen. Der Wert der Option encryption des format-Parameters gibt einen DBMS_CRYPTO-Verschlüsselungsalgorithmus an, der zum Entschlüsseln von Daten verwendet wird.

    Weitere Informationen zu Verschlüsselungsalgorithmen finden Sie unter DBMS_CRYPTO Algorithms.

    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.

    Weitere Informationen zu den Parametern finden Sie unter Prozedur COPY_DATA.

    Ausführliche Informationen zu den verfügbaren format-Parametern, die Sie mit DBMS_CLOUD.COPY_DATA verwenden können, finden Sie unter DBMS_CLOUD-Packageformatoptionen.

Daten mit einer benutzerdefinierten Funktion entschlüsseln und laden

Zeigt die Schritte zum Entschlüsseln von Dateien in Object Storage und Laden der Daten in Tabellen mit einer benutzerdefinierten Entschlüsselungsfunktion an.

Als Voraussetzung für diese Schritte müssen Sie verschlüsselte Dateien haben und die Dateien in Object Storage hochladen. In diesem Beispiel wird eine CSV-Datei verwendet. Es wird davon ausgegangen, dass die Datei mit dem Algorithmus DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 verschlüsselt und in den Cloud-Objektspeicher hochgeladen wird.

Weitere Informationen zur Funktion ENCRYPT finden Sie unter ENCRYPT-Funktion.

Weitere Informationen zum Generieren eines Verschlüsselungsschlüssels finden Sie unter DBMS_CRYPTO-Betriebshinweise.

So entschlüsseln und laden Sie Daten aus Object Storage in eine vorhandene Tabelle in Autonomous Database:

  1. Melden Sie sich bei Ihrer Autonomous Database-Instanz an.

    Weitere Informationen finden Sie unter Verbindung zu Autonomous Database herstellen.

  2. Speichern Sie die Zugangsdaten für den Cloudobjektspeicher mit DBMS_CLOUD.CREATE_CREDENTIAL.

    Beispiele:

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

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

    Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.

    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.

  3. Erstellen Sie eine benutzerdefinierte Entschlüsselungs-Callback-Funktion.

    Beispiele:

    CREATE OR REPLACE FUNCTION decryption_func (data IN BLOB)
    RETURN BLOB
    IS
      l_decrypted_data     BLOB;
      response             DBMS_CLOUD_TYPES.resp;
      l_response_json      JSON_ARRAY_T;
      l_response_json_obj  JSON_OBJECT_T;
      l_secret_id          VARCHAR2(4000) := '<secret_ocid>';
      l_key                VARCHAR2(4000);
    BEGIN
       response := DBMS_CLOUD.send_request (
                    credential_name => 'OCI$RESOURCE_PRINCIPAL',
                    uri             => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/' || l_secret_id,
                    method          => 'GET');
      l_response_json_obj := JSON_OBJECT_T.parse (DBMS_CLOUD.get_response_text(response));
      l_key := UTL_RAW.cast_to_varchar2 (UTL_ENCODE.base64_decode(UTL_RAW.cast_to_raw (l_response_json_obj.get_object('secretBundleContent').get_string('content'))));
     
      DBMS_LOB.createtemporary (l_decrypted_data, TRUE, DBMS_LOB.CALL);
      DBMS_CRYPTO.decrypt (
          dst => l_decrypted_data,
          src => data,
          typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
          key => l_key
        );
      RETURN l_decrypted_data;
    END decryption_func;
    /

    Dadurch wird die Entschlüsselungsfunktion DECRYPTION_FUNC erstellt. Diese Funktion entschlüsselt Daten mit einer Stream- oder Block-Cipher mit einem vom Benutzer angegebenen Schlüssel. Der im Beispiel vom Benutzer angegebene Schlüssel wird in Oracle Cloud Infrastructure Vault gespeichert und dynamisch abgerufen, indem ein REST-Aufruf an den Oracle Cloud Infrastructure Vault-Service erfolgt.

  4. Führen Sie DBMS_CLOUD.COPY_DATA aus, und geben Sie die Option format encryption an, und geben Sie die benutzerdefinierte Funktion an, die Sie zum Entschlüsseln der Daten erstellt haben.
    BEGIN
     DBMS_CLOUD.COPY_DATA (
        table_name      => 'CSV_COPY_DATA',
        credential_name => 'OBJ_STORE_CRED',
        file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/encrypted.csv',
        format          => json_object(
                             'type' value 'csv',
                             'encryption' value json_object('user_defined_function' value 'admin.decryption_func'))
      );
    end;
    /

    Dadurch wird die Datei ENCRYPTED.CSV im Object Storage entschlüsselt. Die Daten werden dann in die Tabelle CSV_COPY_DATA geladen. Der Wert der Option encryption des Parameters format gibt einen benutzerdefinierten Funktionsnamen an, der zum Entschlüsseln von Daten verwendet werden soll.

    Hinweis

    Sie benötigen die Berechtigung EXECUTE für die benutzerdefinierte Funktion.

    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.

    Weitere Informationen zu den Parametern finden Sie unter Prozedur COPY_DATA.

    Ausführliche Informationen zu den verfügbaren format-Parametern, die Sie mit DBMS_CLOUD.COPY_DATA verwenden können, finden Sie unter DBMS_CLOUD-Packageformatoptionen.