Oracle SecureFiles是在Oracle 11g引进的,它有传统的大年夜对象(已改名为BasicFile LOB)所不具有的一些优势。Oracle SecureFile LOB撑持智能数据紧缩,它是一种消弭多次存储不异数据副本的往重编制,还撑持其他一些利用大年夜对象晋升机能的特点。这些新特点中最有效的一个是Oracle的透明数据加密功能,今朝已扩大并加进了Oracle SecureFiles。
当我们在一个或多个LOB字段上启用透明数据加密(TDE)时,Oracle会在数据文件、备份文件和重做日记文件的块层次上主动对字段履行加密和解密把持。在启用以后,LOB只能遵循一一字段的编制履行加密,这个字段的所有LOB(超越所有可用分区)城市加密。利用法度和拜候数据表的用户完全不知道所产生的透明数据加密把持。但是,因为传统的导进导出东西和基于可转移表空间的导出把持不撑持TDE,所以在移动这些包含加密字段的数据时必需利用Data Pump导进和导出东西。
TDE撑持下面的加密算法:
3DES16——利用168位密钥的三重数据加密尺度。
AES128——利用128位密钥的高级加密尺度。
AES192——利用192位密钥的高级加密尺度。这是默许算法。
AES256——利用256位密钥的高级加密尺度。
在开端利用透明数据加密之前,安然治理员必需先成立一个wallet和设定一个主密钥。我们可利用与其他Oracle数据库组件共享的默许数据库wallet。别的,我们可以成立一个TDE专用的自力wallet。Oracle强烈建议利用一个自力wallet来存储主加密密钥。假定sqlnet.ora文件中没有设置ENCRYPTION_WALLET_LOCATION参数,那么它就会利用WALLET_LOCATION值。假定sqlnet.ora文件没有设置WALLET_LOCATION,那么它就会利用默许数据库wallet。默许数据库wallet的位置是ORACLE_BASE/admin/DB_UNIQUE_NAME/wallet。
假定利用TDE专用的wallet,那么必需利用ENCRYPTION_WALLET_LOCATION参数在sqlnet.ora文件中指定wallet位置。主暗码将用于呵护数据表暗码和表空间加密密钥,并且存储在外部安然模块中。默许环境下,TDE会生成一个随奥秘钥。别的,它也多是来自于专门用于加密的PKI证书的现有密钥对。
利用下面的号令,便可以设置主加密密钥:
ALTER SYSTEM SET ENCRYPTION KEY ["certificate_ID"] IDENTIFIED BY "password";
certificate_ID ——这是一个可选字符串,它包含了Oracle wallet所存储证书的独一标识符。假定想要利用PKI私有密钥作为主加密密钥,则可利用这个参数。
password ——这是安然模块必然要利用的wallet暗码。它辨别大年夜小写。
这个数据库必需将主加密密钥加载到内存中,然后它才能加密或解密字符/表空间。下面的ALTER SYSTEM号令将显式打开wallet:
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password"
此中的“password”值是指成立加密密钥时所利用的暗码。这个暗码串必需添加到双号中。在wallet打开以后,它会一向保持打开,直到数据库实例封锁或显式封锁wallet。下面的号令将显式封锁wallet:
ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "password"
封锁wallet将禁用所有加密和解密把持。每当我们从头启动一个数据库实例,我们都必需打开wallet,从头启用加密和解密把持。一旦成立和打开了wallet,我们便可以在ENCRYPT子句中利用CREATE TABLE和ALTER TABLE号令。
用于加密非LOB字段的透明数据加密语法与在Oracle SecureFiles中启用加密的语法完全不异。它们有一个首要的辨别,非LOB字段可利用NO SALT参数禁止TDE在加密数据之前先给数据添加一个随机字符串。Oracle SecureFile LOB字段不撑持NO SALT选项。我们可利用数据字典视图USER_ENCRYPTED_COLUMNS肯定应当加密哪一些字段,和这些字段的状况。下面是一些ENCRYPT子句的例子:
CREATE TABLE tab_3DES (col1 CLOB ENCRYPT USING '3DES168')
LOB(col1) STORE AS SECUREFILE(
CACHE
NOLOGGING
);
利用默许加密算法(AES192)和一个暗码成立一个Oracle SecureFile LOB字段:
CREATE TABLE tab_enc_pw (col1 CLOB ENCRYPT IDENTIFIED BY badpassword)
LOB(col1) STORE AS SECUREFILE(
CACHE
);
利用AES256启用LOB加密:
ALTER TABLE tab_nocrypt MODIFY
( col1 CLOB ENCRYPT USING 'AES256');
通太从头生成加密密钥点窜一个Oracle SecureFiles字段:
ALTER TABLE tab_3DES REKEY USING 'AES256';
Disable LOB encryption:
禁用LOB加密:
ALTER TABLE tab_enc_pw MODIFY
( col1 CLOB DECRYPT);
Oracle数据库中存储的大年夜对象数据容量会继续增加,可是存储费用在不竭降落。此中有良多的敏感数据,如医疗记实、员工数据和常识产权。可以或许对这些信息进行加密,这是很是贵重的,也能够避免在将来投进大年夜量金钱和精力往实现安然性。