オブジェクト・ストレージからのインポート中のデータの復号化

Object Storageに格納された暗号化されたファイルからデータを復号化およびロードできます。外部表で使用するオブジェクト・ストレージ上の暗号化されたデータを復号化することもできます。

このオプションは、ソース・ファイル内のデータが暗号化されている場合に、オンプレミス・データベースからAutonomous AI Databaseに移行する場合に便利です。

ノート:このオプションは、4 GB未満のオブジェクト・ストレージ・ファイルでのみサポートされています。

このオプションは、次の手順に適用できます。

DBMS_CRYPTOアルゴリズムを使用したデータの復号化およびロード

オブジェクト・ストレージから暗号化されたファイルを復号化し、自律型AIデータベースの表にデータをロードするステップを示します(復号化ステップではDBMS_CRYPTOアルゴリズムを使用します)。

前提条件として、ファイルを暗号化し、Object Storageにアップロードする必要があります。この例ではCSVファイルを使用し、ファイルはDBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5アルゴリズムを使用して暗号化され、クラウド・オブジェクト・ストレージにアップロードされることを前提としています。

ENCRYPTファンクションの詳細は、「ENCRYPTファンクション」を参照してください。

暗号化キーの生成の詳細は、DBMS_CRYPTOの操作上のノートを参照してください。

オブジェクト・ストレージからAutonomous AI Database上の既存の表にデータを復号化してロードするには:

  1. Autonomous AI Databaseインスタンスに接続します。

  2. DBMS_CLOUD.CREATE_CREDENTIALを使用してクラウド・オブジェクト・ストレージ資格証明を格納します

    たとえば:

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

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

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

  3. DBMS_CLOUD.CREATE_CREDENTIALを使用して、キーを格納する資格証明を作成します。たとえば:

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL (
         credential_name => 'ENC_CRED_NAME',
         username        => '*Any_username*',
         password        => 'password'
       );
     END;
     /
    

    別の方法として、ボールトにキーを格納する資格証明を作成できます。たとえば:

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

    ノート:キーを格納する資格証明に指定するusernameパラメータは、任意の文字列にできます。

    これにより、ボールト・シークレット資格証明であるENC_CRED_NAME資格証明が作成されます。この資格証明では、シークレット(復号化/暗号化キー)がOracle Cloud Infrastructure Vaultにシークレットとして格納されます。

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

  4. DBMS_CLOUD.COPY_DATAを実行し、復号化方法としてDBMS_CRYPTO暗号化アルゴリズムを指定します。

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

    これにより、オブジェクト・ストレージ内のENCRYPTED.CSVファイルが復号化されます。その後、データがCSV_COPY_DATA表にロードされます。formatパラメータのencryptionオプション値は、データの復号化に使用するDBMS_CRYPTO暗号化アルゴリズムを指定します。

    暗号化アルゴリズムの詳細は、「DBMS_CRYPTOアルゴリズム」を参照してください。

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

    パラメータの詳細は、「COPY_DATAプロシージャ」をご覧ください。

    使用可能なformatパラメータの詳細は、DBMS_CLOUD.COPY_DATAとともに使用できます。「DBMS_CLOUDパッケージのフォーマット・オプション」を参照してください。

ユーザー定義関数を使用したデータの復号化およびロード

オブジェクト・ストレージのファイルを復号化し、ユーザー定義の復号化関数を使用してデータを表にロードするステップを示します。

これらのステップの前提条件として、ファイルを暗号化し、Object Storageにファイルをアップロードする必要があります。この例ではCSVファイルを使用し、ファイルはDBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5アルゴリズムを使用して暗号化され、クラウド・オブジェクト・ストレージにアップロードされることを前提としています。

ENCRYPTファンクションの詳細は、「ENCRYPTファンクション」を参照してください。

暗号化キーの生成の詳細は、DBMS_CRYPTOの操作上のノートを参照してください。

オブジェクト・ストレージからAutonomous AI Database上の既存の表にデータを復号化してロードするには:

  1. Autonomous AI Databaseインスタンスに接続します。

  2. DBMS_CLOUD.CREATE_CREDENTIALを使用してクラウド・オブジェクト・ストレージ資格証明を格納してください。

    たとえば:

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

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

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

  3. ユーザー定義関数復号化コールバック関数を作成します。

    たとえば:

     CREATE OR REPLACE FUNCTION decryption_func(data IN BLOB)
     RETURN BLOB
     IS
       l_decrypted_data BLOB;
     BEGIN
       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 => 'encryption key'
         );
       RETURN l_decrypted_data;
     END decryption_callback;
     /
    

    これにより、DECRYPTION_FUNC復号化ファンクションが作成されます。このファンクションは、ユーザーが指定するキーとストリーム暗号またはブロック・暗号を使用してデータを復号します。この例では、ユーザーが指定したキーはOracle Cloud Infrastructure Vaultに格納され、Oracle Cloud Infrastructure VaultサービスへのRESTコールを行うことで動的に取得されます。

  4. DBMS_CLOUD.COPY_DATAを実行し、formatオプションencryptionを指定して、データを復号化するために作成したユーザー定義関数を指定します。

     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/namepace-string/b/bucketname/o/encrypted.csv',
         format          => json_object(
                              'type' value 'csv',
                              'encryption' value json_object('user_defined_function' value 'admin.decryption_func'))
       );
     end;
     /
    

    これにより、オブジェクト・ストレージ内のENCRYPTED.CSVファイルが復号化されます。その後、データがCSV_COPY_DATA表にロードされます。formatパラメータのencryptionオプション値は、データの復号化に使用するユーザー定義関数名を指定します。

    ノート:ユーザー定義関数に対するEXECUTE権限が必要です。

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

    パラメータの詳細は、「COPY_DATAプロシージャ」をご覧ください。

    使用可能なformatパラメータの詳細は、DBMS_CLOUD.COPY_DATAとともに使用できます。「DBMS_CLOUDパッケージのフォーマット・オプション」を参照してください。