oracle Wallet的使用(即内部加密技术TDE(Transparent Data Encryption )) 算法
1. TDE是Oracle10gR2中推出的一个新功能,使用时要保证Oracle版本是在10gR2或者以上
--查看oracle版本:
select * from v$version;sql
二、建立一个新目录,并指定为Wallet目录
D:\oracle\product\10.2.0\admin\ora10\ora_wallet数据库
3. 设置wallet目录,在参数文件sqlnet.ora中,按照下面的格式加入信息:
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)
(METHOD_DATA=(DIRECTORY=D:\oracle\product\10.2.0\admin\ora10\ora_wallet)))oracle
4. 建立master key文件,指定wallet密码,使用SYS用户登入系统,创建加密文件
SQL> alter system set encryption key identified by "wallet";
System alteredide
-- 密码"wallet"不加引号时,后面使用时也不须要用引号
此时在设置的目录下,多出一个Personal Information Exchange类型的文件,至关于咱们生成的master key文件。D:\oracle\product\10.2.0\admin\ora10\ora_wallet\ewallet.p12加密
五、启动、关闭Wallet
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet";
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet"
ORA-28354: wallet 已经打开
SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE; --关闭
System altered
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet"; --打开
System altered
到此,已经成功配置了Wallet,建立了master key。spa
下面看如何使用TDE进行数据加密:orm
加密数据列:
对数据列加密是TDE一个经常使用的功能。常须要对数据库中某个表的某个敏感数据进行加密处理,方式信息的外泄。索引
首先,在定义数据表中的数据列(或者修改数据列)的时候,使用ENCRYPT进行标注。表示这个字段是使用加密保护的重要字典。
--建临时表:
create table t_tmp_emplorey
as
select * from emplorey t字符串
--加密数据列,使用了ENCRYPT进行标志,代表须要对这个字段进行加密处理,采用默认的加密配置。
alter table scott.t_tmp_emplorey modify (sal encrypt);
注意:在默认不指定的状况下,Oracle在加密以前,对明文都要进行salt处理。所谓salt处理是一种强化加密数据的方法。经过在加密前明文中掺入一个随机字符串,来强化加密层级,防止进行字典***和其余类型的破解操做。若是不须要进行salt处理,就是在ENCRYPT后面加 No Salt。
--例: alter table scott.t_tmp_emplorey modify (sal encrypt no salt);
--指定加密算法
alter table scott.t_tmp_emplorey modify (sal encrypt using '3DES168');
--若是要对一个已经加密处理的数据列,解除加密,使用alter table…和DECRYPT关键字就能够实现。
SQL> alter table scott.t_tmp_emplorey modify (sal DECRYPT) ;
Table altered
--解除加密后,关闭Wallet后,查询数据不受影响。
6. 对查询、索引的影响:
查询结果彷佛和通常的没有差异,可是若是关闭了解密Wallet会如何?
SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
System altered
--再次查询时报错
select * from scott.t_tmp_emplorey t;
ORA-28365: Wallet 未打开
--可以查找到数目
select count(1) from scott.t_tmp_emplorey t;
--对索引的影响,若是列加密使用了salt,在对该列进行索引的时候,会报错。:
SQL> create index ind_t_tmp_emplorey on t_tmp_emplorey(sal);
create index ind_t_tmp_emplorey on t_tmp_emplorey(sal);
ORA-28338: 没法使用 salt 值加密索引列
SQL> create index ind_t_tmp_emplorey on t_tmp_emplorey(EMPNO); Index created --没有加密的列能够创建索引