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

オブジェクト・ストレージへのエクスポート中に表データを暗号化できます。

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

暗号化されたデータをオブジェクト・ストレージにエクスポートする場合は、次の点に注意してください:

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

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

  • 次の2つの暗号化方法がサポートされています。

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

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

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

トピック

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

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

クラウド・オブジェクト・ストレージへのエクスポート中にデータを暗号化するには、次のステップを実行します(この例では、表データを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 Object Storeにアクセスするための資格証明を作成する必要はありません。詳細は、リソース・プリンシパルを使用した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/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プロシージャおよびDBMS_CLOUD EXPORT_DATAのパッケージ形式オプションを参照してください。

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アルゴリズムを参照してください。

ユーザー定義暗号化機能を使用したデータの暗号化

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

クラウド・オブジェクト・ストレージへのエクスポート中にデータを暗号化するには、次のステップを実行します(この例では、表データを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 Object Storeにアクセスするための資格証明を作成する必要はありません。詳細は、リソース・プリンシパルを使用した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/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プロシージャおよびDBMS_CLOUD EXPORT_DATAのパッケージ形式オプションを参照してください。