從物件儲存匯入時解密資料
您可以解密及載入物件儲存中已加密檔案的資料。您也可以解密您在外部表格中使用之物件儲存的加密資料。
當來源檔案中的資料經過加密時,從內部部署資料庫移轉至自治式 AI 資料庫時,此選項非常有用。
注意:只有小於 4 GB 的物件儲存檔案才支援此選項。
此選項適用於下列程序:
-
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 演算法解密與載入資料
顯示解密物件儲存的加密檔案,並將資料載入自治式 AI 資料庫表格的步驟 (解密步驟使用 DBMS_CRYPTO 演算法)。
您必須先擁有加密的檔案,並將檔案上傳至物件儲存。此範例使用 CSV 檔案,並假設該檔案使用 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 演算法進行加密,然後上傳至您的雲端物件儲存。
如需有關 ENCRYPT 函數的詳細資訊,請參閱 ENCRYPT 函數。
如需產生加密金鑰的詳細資訊,請參閱 DBMS_CRYPTO Operational Notes 。
若要從物件儲存將資料解密並載入至自治式 AI 資料庫的現有表格,請執行下列動作:
-
連線至您的自治式 AI 資料庫執行處理。
-
使用
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 程序以瞭解詳細資訊。
-
建立使用
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/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; /這會解密物件儲存中的
ENCRYPTED.CSV檔案。接著,資料會載入CSV_COPY_DATA表格中。format參數encryption選項值會指定用於解密資料的DBMS_CRYPTO加密演算法。如需加密演算法的詳細資訊,請參閱 DBMS_CRYPTO 演算法。
在此範例中,
*namespace-string*是 Oracle Cloud Infrastructure 物件儲存命名空間,而bucketname是儲存桶名稱。請參閱瞭解物件儲存命名空間以瞭解詳細資訊。如需有關參數的詳細資訊,請參閱 COPY_DATA Procedure 。
如需可用
format參數的詳細資訊,您可以與DBMS_CLOUD.COPY_DATA搭配使用,請參閱 DBMS_CLOUD Package Format Options 。
使用使用者定義的函數解密及載入資料
顯示使用使用者定義的解密函數解密物件儲存中的檔案,並將資料載入表格中的步驟。
您必須先具備加密的檔案,並將檔案上傳至物件儲存,才能夠執行這些步驟。此範例使用 CSV 檔案,並假設該檔案使用 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 演算法進行加密,然後上傳至您的雲端物件儲存。
如需有關 ENCRYPT 函數的詳細資訊,請參閱 ENCRYPT 函數。
如需產生加密金鑰的詳細資訊,請參閱 DBMS_CRYPTO Operational Notes 。
若要從物件儲存將資料解密並載入至自治式 AI 資料庫的現有表格,請執行下列動作:
-
連線至您的自治式 AI 資料庫執行處理。
-
使用
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 程序以瞭解詳細資訊。
-
建立使用者定義的函數解密回呼函數。
舉例而言:
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 呼叫來動態擷取。 -
執行
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; /這會解密物件儲存中的
ENCRYPTED.CSV檔案。接著,資料會載入CSV_COPY_DATA表格中。format參數encryption選項值指定用來解密資料的使用者定義函數名稱。注意:您必須具有使用者定義函數的
EXECUTE權限。在此範例中,
namespace-string是 Oracle Cloud Infrastructure 物件儲存命名空間,而bucketname是儲存桶名稱。請參閱瞭解物件儲存命名空間以瞭解詳細資訊。如需有關參數的詳細資訊,請參閱 COPY_DATA Procedure 。
如需可用
format參數的詳細資訊,您可以與DBMS_CLOUD.COPY_DATA搭配使用,請參閱 DBMS_CLOUD Package Format Options 。