匯出至物件儲存時加密資料
您可以在匯出至物件儲存時加密表格資料。
從自治式 AI 資料庫匯出至物件儲存時,請使用 format 參數和 encryption 選項搭配 DBMS_CLOUD.EXPORT_DATA 來加密資料。
將加密的資料匯出至物件儲存時,請注意下列事項:
-
將資料從自治式 AI 資料庫匯出為 CSV、JSON 或 XML 格式的物件儲存時,才支援
encryption選項。 -
當匯出同時包含加密和壓縮時,作業順序如下:首先會壓縮資料,接著加密資料,然後上傳到物件儲存體。
-
有兩種支援的加密方法:
-
使用使用者定義的函數。
-
使用
DBMS_CRYPTO指定的加密演算法。請參閱 DBMS_CRYPTO ,瞭解加密和解密的加密功能和程序的相關資訊。
-
使用 DBMS_CRYPTO 加密演算法加密資料
顯示在匯出至雲端物件儲存時,使用 DBMS_CRYPTO 加密演算法加密資料的步驟。
在匯出至雲端物件儲存時,執行下列步驟以加密資料 (此範例會將表格資料匯出至 CSV 檔案):
-
連線至您的自治式 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_CRYPTO加密演算法加密資料時,會將加密金鑰儲存在證明資料中。金鑰是在您以DBMS_CLOUD.CREATE_CREDENTIAL建立之證明資料的password欄位中指定。舉例而言:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'ENC_CRED_NAME', username => 'Any_username', password => 'password' ); END; / -
執行
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 程序和 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 演算法解密與載入資料。
-
-
在非自治式 AI 資料庫的系統上,您可以將
DBMS_CRYPTO套裝軟體與相同的演算法選項和金鑰搭配使用,以解密檔案。請注意,金鑰會以
VARCHAR2形式儲存在自治式 AI 資料庫的證明資料中,但DBMS_CRYPTO會使用RAW類型作為金鑰參數。如需加密演算法的詳細資訊,請參閱 DBMS_CRYPTO 演算法。
使用使用者定義的加密功能加密資料
顯示在匯出至雲端物件儲存時,使用使用者定義的加密函數加密資料的步驟。
在匯出至雲端物件儲存時,執行下列步驟以加密資料 (此範例會將表格資料匯出至 CSV 檔案):
-
連線至您的自治式 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 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 Operational Notes 。 -
使用
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 程序和 EXPORT_DATA 的 DBMS_CLOUD 套裝程式格式選項,瞭解詳細資訊。