從物件儲存匯入時解密資料

您可以解密及載入物件儲存中已加密檔案的資料。您也可以解密您在外部表格中使用之物件儲存的加密資料。

當來源檔案中的資料經過加密時,從內部部署資料庫移轉至自治式 AI 資料庫時,此選項非常有用。

注意:只有小於 4 GB 的物件儲存檔案才支援此選項。

此選項適用於下列程序:

使用 DBMS_CRYPTO 演算法解密與載入資料

顯示解密物件儲存的加密檔案,並將資料載入自治式 AI 資料庫表格的步驟 (解密步驟使用 DBMS_CRYPTO 演算法)。

您必須先擁有加密的檔案,並將檔案上傳至物件儲存。此範例使用 CSV 檔案,並假設該檔案使用 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 演算法進行加密,然後上傳至您的雲端物件儲存。

如需有關 ENCRYPT 函數的詳細資訊,請參閱 ENCRYPT 函數

如需產生加密金鑰的詳細資訊,請參閱 DBMS_CRYPTO Operational Notes

若要從物件儲存將資料解密並載入至自治式 AI 資料庫的現有表格,請執行下列動作:

  1. 連線至您的自治式 AI 資料庫執行處理。

  2. 使用 DBMS_CLOUD.CREATE_CREDENTIAL 儲存您的雲端物件儲存證明資料。

    舉例而言:

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

    您為 usernamepassword 提供的值取決於您使用的雲端物件儲存服務。

    請參閱 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 Procedure

    如需可用 format 參數的詳細資訊,您可以與 DBMS_CLOUD.COPY_DATA 搭配使用,請參閱 DBMS_CLOUD Package Format Options

使用使用者定義的函數解密及載入資料

顯示使用使用者定義的解密函數解密物件儲存中的檔案,並將資料載入表格中的步驟。

您必須先具備加密的檔案,並將檔案上傳至物件儲存,才能夠執行這些步驟。此範例使用 CSV 檔案,並假設該檔案使用 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 演算法進行加密,然後上傳至您的雲端物件儲存。

如需有關 ENCRYPT 函數的詳細資訊,請參閱 ENCRYPT 函數

如需產生加密金鑰的詳細資訊,請參閱 DBMS_CRYPTO Operational Notes

若要從物件儲存將資料解密並載入至自治式 AI 資料庫的現有表格,請執行下列動作:

  1. 連線至您的自治式 AI 資料庫執行處理。

  2. 使用 DBMS_CLOUD.CREATE_CREDENTIAL 儲存您的雲端物件儲存證明資料。

    舉例而言:

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

    您為 usernamepassword 提供的值取決於您使用的雲端物件儲存服務。

    請參閱 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 Procedure

    如需可用 format 參數的詳細資訊,您可以與 DBMS_CLOUD.COPY_DATA 搭配使用,請參閱 DBMS_CLOUD Package Format Options