Daten beim Importieren aus Object Storage entschlüsseln

Sie können Daten aus verschlüsselten Dateien entschlüsseln und laden, die in Object Storage gespeichert sind. 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 hochgeladen haben. 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 Ihren Cloud Object Storage 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 Operational Notes.

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

  1. Verbinden Sie sich mit Ihrer Autonomous Database-Instanz.

    Weitere Informationen finden Sie unter Verbindung zu Autonomous Database herstellen.

  2. Speichern Sie Ihre Zugangsdaten für die Cloud-Objektspeicher mit DBMS_CLOUD.CREATE_CREDENTIAL.

    Beispiel:

    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 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.

  3. Erstellen Sie Zugangsdaten zum Speichern des Schlüssels mit DBMS_CLOUD.CREATE_CREDENTIAL. Beispiel:
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'ENC_CRED_NAME',
        username        => 'Any_username',
        password        => 'password'
      );
    END;
    /

    Alternativ können Sie Zugangsdaten erstellen, um den Schlüssel in einem Vault zu speichern. Beispiel:

    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 in 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 Parameters format gibt einen Verschlüsselungsalgorithmus DBMS_CRYPTO an, der zum Entschlüsseln von Daten verwendet werden soll.

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

    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.

    Ausführliche 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 zum 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 hochgeladen haben. 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 Ihren Cloud Object Storage 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 Operational Notes.

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

  1. Verbinden Sie sich mit Ihrer Autonomous Database-Instanz.

    Weitere Informationen finden Sie unter Verbindung zu Autonomous Database herstellen.

  2. Speichern Sie Ihre Zugangsdaten für die Cloud-Objektspeicher mit DBMS_CLOUD.CREATE_CREDENTIAL.

    Beispiel:

    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 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.

  3. Erstellen Sie eine benutzerdefinierte Funktion Decryption Callback-Funktion.

    Beispiel:

    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 mithilfe einer Stream- oder Block-Cipher mit einem vom Benutzer bereitgestellten Schlüssel. Der im Beispiel 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. Geben Sie außerdem 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, mit dem Daten entschlüsselt werden.

    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.

    Ausführliche 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.