오브젝트 스토리지에서 임포트하는 동안 데이터 해독

오브젝트 스토리지에 저장된 암호화된 파일에서 데이터를 해독하고 로드할 수 있습니다. 또한 외부 테이블에서 사용하는 오브젝트 스토리지에서 암호화된 데이터를 해독할 수 있습니다.

이 옵션은 소스 파일의 데이터가 암호화되어 있는 경우 온프레미스 데이터베이스에서 Autonomous Database로 마이그레이션할 때 유용합니다.

주:

이 옵션은 4GB 미만의 오브젝트 스토리지 파일에 대해서만 지원됩니다.

이 옵션은 다음 절차에 적용할 수 있습니다.

  • DBMS_CLOUD.COPY_DATA

  • DBMS_CLOUD.CREATE_EXTERNAL_TABLE

  • DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE

  • DBMS_CLOUD.CREATE_HYBRID_PART_TABLE

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

  • DBMS_CLOUD.COPY_COLLECTION

DBMS_CRYPTO 알고리즘을 사용하여 데이터 해독 및 로드

객체 스토리지에서 암호화된 파일을 해독하고 데이터를 Autonomous Database의 테이블로 로드하는 단계를 보여줍니다(해독 단계에서는 DBMS_CRYPTO 알고리즘을 사용합니다).

사전 요구사항으로 암호화된 파일을 가지고 오브젝트 스토리지에 업로드해야 합니다. 이 예에서는 CSV 파일을 사용하며 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 알고리즘을 사용하여 파일이 암호화되고 Cloud Object Storage에 업로드된 것으로 가정합니다.

ENCRYPT 함수에 대한 자세한 내용은 ENCRYPT Function을 참조하십시오.

암호화 키 생성에 대한 자세한 내용은 DBMS_CRYPTO Operational Notes를 참조하십시오.

오브젝트 스토리지에서 Autonomous Database의 기존 테이블로 데이터를 해독하고 로드하려면 다음을 수행합니다.

  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_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 Procedure를 참조하십시오.

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

    그러면 Object Storage의 ENCRYPTED.CSV 파일이 해독됩니다. 그러면 데이터가 CSV_COPY_DATA 테이블로 로드됩니다. format 매개변수 encryption 옵션 값은 데이터를 해독하는 데 사용할 DBMS_CRYPTO 암호화 알고리즘을 지정합니다.

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

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

    매개변수에 대한 자세한 내용은 COPY_DATA Procedure를 참조하십시오.

    사용 가능한 format 매개변수에 대한 자세한 내용은 DBMS_CLOUD.COPY_DATA과 함께 사용할 수 있습니다. 을 참조하십시오.

사용자 정의 함수로 데이터 해독 및 로드

오브젝트 스토리지에서 파일을 해독하고 사용자 정의 해독 기능을 사용하여 데이터를 테이블로 로드하는 단계를 보여줍니다.

이러한 단계를 수행하기 위해서는 암호화된 파일을 가지고 Object Storage에 파일을 업로드해야 합니다. 이 예에서는 CSV 파일을 사용하며 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 알고리즘을 사용하여 파일이 암호화되고 Cloud Object Storage에 업로드된 것으로 가정합니다.

ENCRYPT 함수에 대한 자세한 내용은 ENCRYPT Function을 참조하십시오.

암호화 키 생성에 대한 자세한 내용은 DBMS_CRYPTO Operational Notes를 참조하십시오.

오브젝트 스토리지에서 Autonomous Database의 기존 테이블로 데이터를 해독하고 로드하려면 다음을 수행합니다.

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

    그러면 Object Storage의 ENCRYPTED.CSV 파일이 해독됩니다. 그러면 데이터가 CSV_COPY_DATA 테이블로 로드됩니다. format 매개변수 encryption 옵션 값은 데이터를 해독하는 데 사용할 사용자 정의 함수 이름을 지정합니다.

    주:

    사용자 정의 함수에 대한 EXECUTE 권한이 있어야 합니다.

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

    매개변수에 대한 자세한 내용은 COPY_DATA Procedure를 참조하십시오.

    사용 가능한 format 매개변수에 대한 자세한 내용은 DBMS_CLOUD.COPY_DATA과 함께 사용할 수 있습니다. DBMS_CLOUD Package Format Options을 참조하십시오.