151.Oracle数据库SQL开发之 大对象——11g对大对象的增强
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50185863
11g对大对象增强如下。
1. 加密LOB数据
对数据进行加密,让未授权用户不能查看或修改数据。例如信用卡号,社会保险号等。
加密数据之前,DBA需要建立一个电子钱包来存储安全细节。电子钱包中的数据包括加密和解密数据所用的私钥。
1.1 创建电子钱包
要创建电子钱包,现在$ORACLE_BASE/admin/$ORACLE_SID目录中创建wallet目录。
创建之后,运行SQLPLUS,使用一个有权限的用户账户连接到数据库,运行ALTER SYSTEM命令为电子钱包加密秘钥密码:如下:
idle> alter system set encryption key identifiedby "testpassword123";
System altered.
之后wallet目录中就会出现ewallet.p12,且数据库自动打开此文件。加密密钥密码存储在此电子钱包中,加密密钥用来加密和解密后台数据。
1.2 加密LOB数据
可以加密存储在BLOB、CLOB或NCLOB中的数据,可以阻止未经授权访问这些数据。
可以使用下面这些算法来加密数据:
l 3DES168
l AES128
l AES192
l AES256
如下创建一个带有CLOB的表,CLOB的内容使用AES128算法加密。
CREATE TABLE clob_content (
id INTEGERPRIMARY KEY,
clob_columnCLOB ENCRYPT USING 'AES128'
) LOB(clob_column) STORE AS SECUREFILE (
CACHE
);
INSERT INTO clob_content (
id,clob_column
) VALUES (
1,TO_CLOB('Creeps in this petty pace')
);
INSERT INTO clob_content (
id,clob_column
) VALUES (
2, TO_CLOB('from day to day')
);
关闭钱包后
Alter system set wallet close;
在检索clob_contetn表就会报错
打开电子钱包如下:
alter system set wallet open identified by"testpassword123";
1.3 加密列数据
CREATE TABLE credit_cards (
card_numberNUMBER(16, 0) ENCRYPT,
first_nameVARCHAR2(10),
last_nameVARCHAR2(10),
expirationDATE
);
INSERT INTO credit_cards (
card_number,first_name, last_name, expiration
) VALUES (
1234,'Jason', 'Bond', '03-FEB-2008'
);
INSERT INTO credit_cards (
card_number,first_name, last_name, expiration
) VALUES (
5768,'Steve', 'Edwards', '07-MAR-2009'
);
访问加密列中的数据增加了额外开销。大约是5%。
2. 压缩LOB数据
create table clob_content3(
id integerprimary key,
clob_columnclob
)lob(clob_column) store as securefile (
compress
cache);
向LOB添加数据时,数据库会自动对数据进行压缩。当从LOB读取数据时,会自动解压。对于最大化数据压缩可以使用COMPRESS HIGH。压缩比越高,读写LOB数据的开销就越大。
3. 删除LOB重复数据
配置BLOB,CLOB或NCLOB,自动删除BLOB,CLOB或NCLOB的任何重复数据,这一过程称为删除重复数据。
如下
create tableclob_content2 (
id integerprimary key,
clob_columnclob
) lob(clob_column) store as securefile (deduplicate lob
cache)
会自动删除添加到LOB的任何重复数据。数据库使用SHA1安全哈希算法删除重复数据。