オブジェクト・ストレージからのインポート中のデータの復号化
Object Storageに格納されている暗号化されたファイルからデータを復号化およびロードできます。また、外部表で使用するObject Storage上の暗号化されたデータを復号化することもできます。
このオプションは、ソース・ファイル内のデータが暗号化されている場合に、オンプレミス・データベースからAutonomous AI Databaseに移行する場合に便利です。
ノート
ノート:このオプションは、4 GB未満のオブジェクト・ストレージ・ファイルでのみサポートされています。
このオプションは、次のプロシージャに適用できます。
-
DBMS_CLOUD.COPY_DATA -
DBMS_CLOUD.CREATE_EXTERNAL_TABLE -
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE -
DBMS_CLOUD.CREATE_HYBRID_PART_TABLEDBMS_CLOUD.CREATE_HYBRID_PART_TABLEの場合、このオプションはオブジェクト・ストレージ・ファイルにのみ適用されます。 -
DBMS_CLOUD.COPY_COLLECTION
DBMS_CRYPTOアルゴリズムを使用したデータの復号化およびロード
オブジェクト・ストレージから暗号化されたファイルを復号化し、Autonomous AI Database上の表にデータをロードするステップを示します(復号化ステップではDBMS_CRYPTOアルゴリズムを使用します)。
前提条件として、ファイルを暗号化し、Object Storageにアップロードする必要があります。この例ではCSVファイルを使用し、ファイルはDBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5アルゴリズムを使用して暗号化され、クラウド・オブジェクト・ストレージにアップロードされると想定しています。
ENCRYPTファンクションの詳細は、「ENCRYPTファンクション」を参照してください。
暗号化キーの生成の詳細は、DBMS_CRYPTOの操作上のノートを参照してください。
オブジェクト・ストレージからAutonomous AI Databaseの既存の表にデータを復号化およびロードするには:
-
Autonomous AI Databaseインスタンスに接続します。
詳細は、Autonomous AI Databaseへの接続を参照してください。
-
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リソースへのアクセスを参照してください。
-
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プロシージャ」を参照してください。
-
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/namespace-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; /これにより、オブジェクト・ストレージ内の
ENCRYPTED.CSVファイルが復号化されます。その後、データはCSV_COPY_DATA表にロードされます。formatパラメータのencryptionオプション値は、データの復号化に使用するDBMS_CRYPTO暗号化アルゴリズムを指定します。暗号化アルゴリズムの詳細は、「DBMS_CRYPTOアルゴリズム」を参照してください。
この例では、
namespace-stringはOracle Cloud Infrastructureオブジェクト・ストレージ・ネームスペースで、bucketnameはバケット名です。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。パラメータの詳細は、「COPY_DATAプロシージャ」を参照してください。
使用可能な
formatパラメータの詳細は、DBMS_CLOUD.COPY_DATAとともに使用できます。「DBMS_CLOUDパッケージのフォーマット・オプション」を参照してください。
ユーザー定義関数を使用したデータの復号化およびロード
オブジェクト・ストレージのファイルを復号化し、ユーザー定義の復号化機能を使用してデータを表にロードするステップを示します。
これらのステップの前提条件として、ファイルを暗号化し、Object Storageにファイルをアップロードする必要があります。この例ではCSVファイルを使用し、ファイルはDBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5アルゴリズムを使用して暗号化され、クラウド・オブジェクト・ストレージにアップロードされると想定しています。
ENCRYPTファンクションの詳細は、「ENCRYPTファンクション」を参照してください。
暗号化キーの生成の詳細は、DBMS_CRYPTOの操作上のノートを参照してください。
オブジェクト・ストレージからAutonomous AI Databaseの既存の表にデータを復号化およびロードするには:
-
Autonomous AI Databaseインスタンスに接続します。
詳細は、Autonomous AI Databaseへの接続を参照してください。
-
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リソースへのアクセスを参照してください。
-
ユーザー定義関数の復号化コールバック関数を作成します。
たとえば:
CREATE OR REPLACE FUNCTION decryption_func (data IN BLOB) RETURN BLOB IS l_decrypted_data BLOB; response DBMS_CLOUD_TYPES.resp; l_response_json JSON_ARRAY_T; l_response_json_obj JSON_OBJECT_T; l_secret_id VARCHAR2(4000) := '<secret_ocid>'; l_key VARCHAR2(4000); BEGIN response := DBMS_CLOUD.send_request ( credential_name => 'OCI$RESOURCE_PRINCIPAL', uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/' || l_secret_id, method => 'GET'); l_response_json_obj := JSON_OBJECT_T.parse (DBMS_CLOUD.get_response_text(response)); l_key := UTL_RAW.cast_to_varchar2 (UTL_ENCODE.base64_decode(UTL_RAW.cast_to_raw (l_response_json_obj.get_object('secretBundleContent').get_string('content')))); 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 => l_key ); RETURN l_decrypted_data; END decryption_func; /これにより、
DECRYPTION_FUNC復号化ファンクションが作成されます。このファンクションは、ユーザーが指定するキーとストリーム暗号またはブロック・暗号を使用してデータを復号します。この例では、ユーザーが指定したキーはOracle Cloud Infrastructure Vaultに格納され、Oracle Cloud Infrastructure VaultサービスへのRESTコールを行うことで動的に取得されます。 -
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/namespace-string/b/bucketname/o/encrypted.csv', format => json_object( 'type' value 'csv', 'encryption' value json_object('user_defined_function' value 'admin.decryption_func')) ); end; /これにより、オブジェクト・ストレージ内の
ENCRYPTED.CSVファイルが復号化されます。その後、データはCSV_COPY_DATA表にロードされます。formatパラメータのencryptionオプション値は、データの復号化に使用するユーザー定義関数名を指定します。ノート
ノート:ユーザー定義ファンクションに対するEXECUTE権限が必要です。この例では、
namespace-stringはOracle Cloud Infrastructureオブジェクト・ストレージ・ネームスペースで、bucketnameはバケット名です。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。パラメータの詳細は、「COPY_DATAプロシージャ」をご覧ください。
使用可能な
formatパラメータの詳細は、DBMS_CLOUD.COPY_DATAとともに使用できます。「DBMS_CLOUDパッケージのフォーマット・オプション」を参照してください。