导出到对象存储时加密数据

在导出到对象存储时,您可以加密表数据。

在从自治 AI 数据库导出到对象存储时,将 format 参数和 encryption 选项与 DBMS_CLOUD.EXPORT_DATA 结合使用以加密数据。

将加密数据导出到对象存储时,请注意以下事项:

使用 DBMS_CRYPTO 加密算法加密数据

显示导出到云对象存储时使用 DBMS_CRYPTO 加密算法加密数据的步骤。

在导出到云对象存储时,执行以下步骤对数据进行加密(此示例将表数据导出到 CSV 文件):

  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 Procedure

  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 是存储桶名称。有关详细信息,请参阅了解对象存储名称空间

    有关更多信息,请参见 EXPORT_DATA ProcedureDBMS_CLOUD Package Format Options for EXPORT_DATA

使用 DBMS_CLOUD.EXPORT_DATA 加密文件后,使用 DBMS_CRYPTO 加密算法加密文件时,可以使用以下选项来使用或导入导出的文件:

使用用户定义的加密功能加密数据

显示在导出到云对象存储时使用用户定义的加密功能加密数据的步骤。

在导出到云对象存储时,执行以下步骤对数据进行加密(此示例将表数据导出到 CSV 文件):

  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 Procedure

  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 文件。带有 encryption 值的 format 参数指定用于加密数据的用户定义加密函数。

    注:您必须对加密函数具有 EXECUTE 权限。

    在此示例中,namespace-string 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关详细信息,请参阅了解对象存储名称空间

    有关更多信息,请参见 EXPORT_DATA ProcedureDBMS_CLOUD Package Format Options for EXPORT_DATA

从对象存储导入时解密数据