オブジェクト・ストレージへのエクスポート中のデータの暗号化

Object Storageへのエクスポート中に表データを暗号化できます。

formatパラメータおよびencryptionオプションをDBMS_CLOUD.EXPORT_DATAとともに使用して、Autonomous Databaseからオブジェクト・ストレージにエクスポートするときにデータを暗号化します。

暗号化されたデータをObject Storageにエクスポートする際には、次の点に注意してください。

  • encryptionオプションは、データをCSV、JSONまたはXMLとしてAutonomous Databaseからオブジェクト・ストレージにエクスポートする場合にのみサポートされます。

  • エクスポートに暗号化と圧縮の両方が含まれる場合、操作の順序は、最初にデータが圧縮され、次にデータが暗号化されてから、Object Storageにアップロードされます。

  • サポートされている暗号化方法は2つあります。

    • ユーザー定義関数の使用。

    • DBMS_CRYPTOで指定された暗号化アルゴリズムを使用します。

      暗号化および復号化の暗号化関数および手順の詳細は、DBMS_CRYPTOを参照してください。

トピック

DBMS_CRYPTO暗号化アルゴリズムを使用したデータの暗号化

クラウド・オブジェクト・ストレージへのエクスポート中に、DBMS_CRYPTO暗号化アルゴリズムを使用してデータを暗号化するステップを示します。

Cloud Object Storageへのエクスポート中にデータを暗号化するには、次のステップを実行します(この例では、表データをCSVファイルにエクスポートします)。

  1. Autonomous Databaseインスタンスに接続してください。

    詳細は、Autonomous Databaseへの接続を参照してください。

  2. DBMS_CLOUD.CREATE_CREDENTIALを使用してクラウド・オブジェクト・ストレージ資格証明を格納します

    たとえば:

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

    usernameおよびpasswordに指定する値は、使用しているクラウド・オブジェクト・ストレージ・サービスによって異なります

    詳細は「CREATE_CREDENTIALプロシージャ」を参照してください。

    リソース・プリンシパル資格証明を有効にする場合、Oracle Cloud Infrastructureオブジェクト・ストアにアクセスするための資格証明の作成は必要ありません。詳細は、リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセスを参照してください。

  3. 暗号化キー(データの暗号化に使用される暗号化キー)を格納する資格証明を作成します。

    DBMS_CRYPTO暗号化アルゴリズムを使用してデータを暗号化する場合は、暗号化キーを資格証明に格納します。キーは、DBMS_CLOUD.CREATE_CREDENTIALで作成した資格証明のpasswordフィールドで指定されます。

    たとえば:

    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.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/namespace-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プロシージャおよびEXPORT_DATAのDBMS_CLOUDパッケージ・フォーマット・オプションを参照してください。

DBMS_CLOUD.EXPORT_DATAを使用してファイルを暗号化した後、DBMS_CRYPTO暗号化アルゴリズムを使用してファイルを暗号化するときに、エクスポートしたファイルを使用またはインポートするための次のオプションがあります。

  • DBMS_CLOUD.COPY_DATAまたはDBMS_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パッケージを同じアルゴリズム・オプションおよびキーとともに使用してファイルを復号化できます。

    キーはAutonomous Databaseの資格証明にVARCHAR2として格納されますが、DBMS_CRYPTOはキー・パラメータにRAWタイプを使用します。

    暗号化アルゴリズムの詳細は、「DBMS_CRYPTOアルゴリズム」を参照してください。

ユーザー定義暗号化機能によるデータの暗号化

クラウド・オブジェクト・ストレージへのエクスポート中に、ユーザー定義の暗号化機能を使用してデータを暗号化するステップを示します。

Cloud Object Storageへのエクスポート中にデータを暗号化するには、次のステップを実行します(この例では、表データをCSVファイルにエクスポートします)。

  1. Autonomous Databaseインスタンスに接続してください。

    詳細は、Autonomous Databaseへの接続を参照してください。

  2. DBMS_CLOUD.CREATE_CREDENTIALを使用して、クラウド・オブジェクト・ストレージ資格証明を格納します

    たとえば:

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

    usernameおよびpasswordに指定する値は、使用しているクラウド・オブジェクト・ストレージ・サービスによって異なります

    詳細は「CREATE_CREDENTIALプロシージャ」を参照してください。

    リソース・プリンシパル資格証明を有効にする場合、Oracle Cloud Infrastructureオブジェクト・ストアにアクセスするための資格証明の作成は必要ありません。詳細は、リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセスを参照してください。

  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の操作上のノートを参照してください。
  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/namespace-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プロシージャおよびEXPORT_DATAのDBMS_CLOUDパッケージ・フォーマット・オプションを参照してください。