匯出至物件儲存時加密資料

您可以在匯出至物件儲存時加密表格資料。

當您從 Autonomous Database 匯出至 Object Storage 時,請使用 format 參數和 encryption 選項搭配 DBMS_CLOUD.EXPORT_DATA 來加密資料。

將加密的資料匯出至物件儲存時,請注意下列事項:

  • 將資料從 Autonomous Database 匯出至 CSV、JSON 或 XML 格式的物件儲存時,才支援 encryption 選項。

  • 當匯出同時包含加密和壓縮時,作業的順序是:先壓縮資料,接著加密資料,然後上傳至物件儲存。

  • 支援的加密方法有兩種:

    • 使用使用者定義的函數。

    • 使用 DBMS_CRYPTO 指定的加密演算法。

      如需加密函數及加密與解密程序的相關資訊,請參閱 DBMS_CRYPTO

使用 DBMS_CRYPTO 加密演算法加密資料

顯示匯出至雲端物件儲存時,使用 DBMS_CRYPTO 加密演算法加密資料的步驟。

執行下列步驟以在匯出至雲端物件儲存時加密資料 (此範例會將表格資料匯出至 CSV 檔案):

  1. 連線到您的 Autonomous Database 執行處理。
  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_CRYPTO 加密演算法加密資料時,會將加密金鑰儲存在證明資料中。金鑰是在您以 DBMS_CLOUD.CREATE_CREDENTIAL 建立之證明資料的 password 欄位中指定。

    舉例而言:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'ENC_CRED_NAME',
        username        => 'Any_username',
        password        => 'password'
      );
    END;
    /
  4. 執行 DBMS_CLOUD.EXPORT_DATA

    搭配使用 format 參數與 encryption 選項。encryption 類型指定用來加密表格資料的 DBMS_CRYPTO 加密演算法,而 credential_name 值是指定加密密碼 (加密金鑰) 的證明資料。

    舉例而言:

    BEGIN
        DBMS_CLOUD.EXPORT_DATA (
            credential_name => 'OBJ_STORE_CRED',
            file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namepace-string/b/bucketname/o/encrypted.csv',
            query           => 'SELECT * FROM ADMIN.employees',
            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;
    /

    這會將資料從 EMPLOYEES 表格加密並匯出至 CSV 檔案。

    如需有關加密演算法的詳細資訊,請參閱 DBMS_CRYPTO 演算法

    在此範例中,namespace-string 是 Oracle Cloud Infrastructure 物件儲存命名空間,bucketname 是儲存桶名稱。請參閱瞭解 Object Storage 命名空間瞭解詳細資訊。

    如需詳細資訊,請參閱 EXPORT_DATA 程序EXPORT_DATA 的 DBMS_CLOUD 套裝軟體格式選項

使用 DBMS_CLOUD.EXPORT_DATA 加密檔案之後,當您使用 DBMS_CRYPTO 加密演算法來加密檔案時,您可以使用下列選項來使用或匯入匯出的檔案:

  • 您可以使用 DBMS_CLOUD.COPY_DATADBMS_CLOUD.COPY_COLLECTION 搭配相同的加密演算法選項和金鑰來解密檔案。

    如需詳細資訊,請參閱使用 DBMS_CRYPTO 演算法解密及載入資料

  • 您可以使用下列任一程序提供相同的加密演算法選項和解密檔案的金鑰,來查詢外部表格中的資料:

    • DBMS_CLOUD.CREATE_EXTERNAL_TABLE

    • DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE

    • DBMS_CLOUD.CREATE_HYBRID_PART_TABLE

      對於 DBMS_CLOUD.CREATE_HYBRID_PART_TABLE,此選項僅適用於物件儲存檔案。

    如需詳細資訊,請參閱使用 DBMS_CRYPTO 演算法解密及載入資料

  • 在非 Autonomous Database 的系統上,您可以使用具有相同演算法選項和金鑰的 DBMS_CRYPTO 套裝軟體來解密檔案。

    請注意,金鑰會以 VARCHAR2 儲存在 Autonomous Database 的證明資料中,但 DBMS_CRYPTO 會使用 RAW 類型作為金鑰參數。

    如需有關加密演算法的詳細資訊,請參閱 DBMS_CRYPTO 演算法

使用使用者定義的加密功能加密資料

顯示在匯出至雲端物件儲存時,使用使用者定義的加密功能加密資料的步驟。

執行下列步驟以在匯出至雲端物件儲存時加密資料 (此範例會將表格資料匯出至 CSV 檔案):

  1. 連線到您的 Autonomous Database 執行處理。
  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 encryption_func (data IN BLOB)
      RETURN BLOB
      IS
          l_encrypted_data BLOB;
           BEGIN   
         DBMS_LOB.CREATETEMPORARY (l_encrypted_data, TRUE, DBMS_LOB.CALL);
         DBMS_CRYPTO.ENCRYPT (
             dst => l_encrypted_data,
             src => data,
             typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
             key => 'encryption key'
          );
         RETURN l_encrypted_data;
    END encryption_func;
    /

    這會建立 ENCRYPTION_FUNC 加密函數。此函數使用使用者提供的金鑰的串流或區塊加密來加密資料。

    附註:

    您必須建立加密金鑰,以作為 KEY 參數中的值。如需有關產生加密金鑰的詳細資訊,請參閱 DBMS_CRYPTO Operational Notes
  4. 使用 format 參數執行 DBMS_CLOUD.EXPORT_DATA ,包括 encryption 選項並指定 user_defined_function

    舉例而言:

    BEGIN
          DBMS_CLOUD.EXPORT_DATA (
            credential_name => 'OBJ_STORE_CRED',
            file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namepace-string/b/bucketname/o/encrypted.csv',
            query           => 'SELECT * FROM ADMIN.emp',
            format          => json_object( 
                                  'type' value 'csv', 
                                  'encryption' value json_object('user_defined_function' value 'admin.encryption_func'))
          );
    END;
    /

    這會將 EMP 表格上指定查詢的資料加密,並將資料匯出為雲端物件儲存上的 CSV 檔案。format 參數加上 encryption 值,可指定用來加密資料的使用者定義加密函數。

    附註:

    您必須具備加密函數的 EXECUTE 權限。

    在此範例中,namespace-string 是 Oracle Cloud Infrastructure 物件儲存命名空間,bucketname 是儲存桶名稱。請參閱瞭解 Object Storage 命名空間瞭解詳細資訊。

    如需詳細資訊,請參閱 EXPORT_DATA 程序EXPORT_DATA 的 DBMS_CLOUD 套裝軟體格式選項