從物件儲存匯入時解密資料
必須啟用 JavaScript 才能正確顯示此內容
從物件儲存匯入時解密資料
您可以從儲存在 Object Storage 中的加密檔案解密和載入資料。您也可以解密在外部表格中使用的 Object Storage 上加密的資料。
如果來源檔案中的資料經過加密,則此選項在從內部部署資料庫移轉至
Autonomous Database 時非常有用。
附註:
只有小於 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 演算法解密與載入資料
顯示解密 Object Storage 中加密檔案並將資料載入 Autonomous Database 上表格的步驟 (解密步驟使用 DBMS_CRYPTO
演算法)。
先決條件是您必須擁有加密的檔案,並將檔案上傳至物件儲存。此範例使用 CSV 檔案,並假設該檔案使用 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5
演算法進行加密,然後上傳至您的雲端物件儲存。
如需 ENCRYPT
函數的詳細資訊,請參閱 ENCRYPT 函數 。
如需產生加密金鑰的詳細資訊,請參閱 DBMS_CRYPTO Operational Notes 。
若要解密資料並將其從 Object Storage 載入 Autonomous Database 上的現有表格,請執行下列動作:
連線到您的 Autonomous Database 執行處理。
使用 DBMS_CLOUD.CREATE_CREDENTIAL
儲存您的雲端物件儲存證明資料。
舉例而言:
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL
(
credential_name => 'OBJ_STORE_CRED',
username => 'user1@example.com',
password => 'password '
);
END;
/
您為 username
和 password
提供的值取決於您使用的雲端物件儲存服務。
使用 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
是儲存桶名稱。請參閱瞭解 Object Storage 命名空間 瞭解詳細資訊。
如需有關參數的詳細資訊,請參閱 COPY_DATA 程序 。
如需可用 format
參數的詳細資訊,您可以與 DBMS_CLOUD.COPY_DATA
搭配使用,請參閱 。
使用使用者定義函數解密及載入資料
顯示解密物件儲存中的檔案並使用使用者定義的解密函數將資料載入表格的步驟。
您必須具備加密檔案並將檔案上傳至物件儲存,才能具備這些步驟的先決條件。此範例使用 CSV 檔案,並假設該檔案使用 DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5
演算法進行加密,然後上傳至您的雲端物件儲存。
如需 ENCRYPT
函數的詳細資訊,請參閱 ENCRYPT 函數 。
如需產生加密金鑰的詳細資訊,請參閱 DBMS_CRYPTO Operational Notes 。
若要解密資料並將其從 Object Storage 載入 Autonomous Database 上的現有表格,請執行下列動作:
連線到您的 Autonomous 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 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
權限。