오브젝트 스토리지로 익스포트하는 동안 데이터 암호화

오브젝트 스토리지로 익스포트하는 동안 테이블 데이터를 암호화할 수 있습니다.

Autonomous Database에서 Object Storage로 익스포트할 때 format 매개변수 및 encryption 옵션을 DBMS_CLOUD.EXPORT_DATA와 함께 사용하여 데이터를 암호화합니다.

암호화된 데이터를 오브젝트 스토리지로 익스포트하는 경우 다음 사항에 유의하십시오.

  • encryption 옵션은 Autonomous Database에서 Object Storage로 데이터를 CSV, JSON 또는 XML로 익스포트할 때만 지원됩니다.

  • 내보내기에 암호화와 압축이 모두 포함된 경우 작업 순서는 데이터가 먼저 압축된 다음 데이터가 암호화되고 오브젝트 스토리지에 업로드되는 것입니다.

  • 지원되는 두 가지 암호화 방법이 있습니다.

    • 사용자 정의 함수를 사용합니다.

    • DBMS_CRYPTO 지정된 암호화 알고리즘을 사용합니다.

      암호화 기능 및 암호화 및 해독 절차에 대한 자세한 내용은 DBMS_CRYPTO를 참조하십시오.

DBMS_CRYPTO 암호화 알고리즘을 사용하여 데이터 암호화

Cloud Object Storage로 익스포트하는 동안 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 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 Algorithms을 참조하십시오.

    이 예에서는 namespace-string가 Oracle Cloud Infrastructure 오브젝트 스토리지 네임스페이스이고 bucketname가 버킷 이름입니다. 자세한 내용은 Object Storage 네임스페이스 이해를 참조하십시오.

    자세한 내용은 EXPORT_DATA 프로시저DBMS_CLOUD EXPORT_DATA용 패키지 형식 옵션을 참조하십시오.

DBMS_CLOUD.EXPORT_DATA를 사용하여 파일을 암호화한 후 DBMS_CRYPTO 암호화 알고리즘을 사용하여 파일을 암호화할 때 내보낸 파일을 사용하거나 가져오기 위한 다음 옵션이 제공됩니다.

  • DBMS_CLOUD.COPY_DATA 또는 DBMS_CLOUD.COPY_COLLECTION을 동일한 암호화 알고리즘 옵션과 키를 사용하여 파일을 해독할 수 있습니다.

    자세한 내용은 Decrypt and Load Data Using DBMS_CRYPTO Algorithms을 참조하십시오.

  • 다음 프로시저 중 하나를 사용하여 동일한 암호화(encryption) 알고리즘 옵션과 키를 제공하여 External Table의 데이터를 query할 수 있습니다.

    • DBMS_CLOUD.CREATE_EXTERNAL_TABLE

    • DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE

    • DBMS_CLOUD.CREATE_HYBRID_PART_TABLE

      DBMS_CLOUD.CREATE_HYBRID_PART_TABLE의 경우 이 옵션은 오브젝트 스토리지 파일에만 적용할 수 있습니다.

    자세한 내용은 Decrypt and Load Data Using DBMS_CRYPTO Algorithms을 참조하십시오.

  • Autonomous Database가 아닌 시스템에서는 DBMS_CRYPTO 패키지를 동일한 알고리즘 옵션과 키를 사용하여 파일을 해독할 수 있습니다.

    키는 Autonomous Database의 인증서에 VARCHAR2로 저장되지만 DBMS_CRYPTO는 키 매개변수에 RAW 유형을 사용합니다.

    암호화 알고리즘에 대한 자세한 내용은 DBMS_CRYPTO Algorithms을 참조하십시오.

사용자 정의 암호화 기능으로 데이터 암호화

Cloud Object Storage로 익스포트하는 동안 사용자 정의 암호화 기능을 사용하여 데이터를 암호화하는 단계를 보여줍니다.

다음 단계를 수행하여 클라우드 오브젝트 스토리지로 익스포트하는 동안 데이터를 암호화합니다(이 예에서는 테이블 데이터를 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 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 파일로 데이터가 익스포트됩니다. format 매개변수와 encryption 값은 데이터를 암호화하는 데 사용할 사용자 정의 암호화 함수를 지정합니다.

    주:

    암호화 기능에 대한 EXECUTE 권한이 있어야 합니다.

    이 예에서는 namespace-string가 Oracle Cloud Infrastructure 오브젝트 스토리지 네임스페이스이고 bucketname가 버킷 이름입니다. 자세한 내용은 Object Storage 네임스페이스 이해를 참조하십시오.

    자세한 내용은 EXPORT_DATA 프로시저DBMS_CLOUD EXPORT_DATA용 패키지 형식 옵션을 참조하십시오.