1.更新 sqlnet.ora 文件以包含一个 ENCRYPTED_WALLET_LOCATION 条目。
打开$ORACLE_HOME/network/admin目录下的sqlnet.ora添加以下条目:
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=D:\oracle\product\10.2.0\db_1\admin)))
指定万能加密密钥创建的目录。
2.创建万能加密密钥
sqlplus /nolog
connect / as sysdba
alter system set key identified by "welcome1";
关闭数据库后需要重新打开密钥
alter system set wallet open identified by "welcome1";
3.创建测试表并插入数据。
create table cust_payment_info
(first_name varchar2(11),
last_name varchar2(10),
order_number number(5),
credit_card_number varchar2(16) ENCRYPT NO SALT,
active_card varchar2(3));
insert into cust_payment_info values
('Jon', 'Oldfield', 10001, '5446959708812985','YES');
insert into cust_payment_info values
('Chris', 'White', 10002, '5122358046082560','YES');
insert into cust_payment_info values
('Alan', 'Squire', 10003, '5595968943757920','YES');
insert into cust_payment_info values
('Mike', 'Anderson', 10004, '4929889576357400','YES');
insert into cust_payment_info values
('Annie', 'Schmidt', 10005, '4556988708236902','YES');
insert into cust_payment_info values
('Elliott', 'Meyer', 10006, '374366599711820','YES');
insert into cust_payment_info values
('Celine', 'Smith', 10007, '4716898533036','YES');
insert into cust_payment_info values
('Steve', 'Haslam', 10008, '340975900376858','YES');
insert into cust_payment_info values
('Albert', 'Einstein', 10009, '310654305412389','YES');
4.可以再加密的列上创建索引。
create index cust_payment_info_idx on cust_payment_info (credit_card_number);
5.查询和更新
select * from CUST_PAYMENT_INFO where CREDIT_CARD_NUMBER = '4556988708236902';
update oe.CUST_PAYMENT_INFO set ACTIVE_CARD='NO' where CREDIT_CARD_NUMBER='4556988708236902';
6.查看加密的列
select * from user_encrypted_columns;
总结:
TDE透明数据加密,因为对SQL来说是透明的,所以要验证是否加密,只能用LogMiner查看日志来验证。它意义在于,数据保存在磁盘上是加密的,如果有人复制了的数据文件,在里面是看不到加密数据的。