为了安全起见,有时想对敏感数据加密,对其进行编码以保证授权用户才能理解它。可以使用Oracle的TDE(Transparent Data Encryption,透明数据加密)特性。使用Oracle钱夹存储密匙,数据库处理所有的加密和解密细节。Oracle Database 10g允许加密表的列,在Oracle Database 11g中,可以加密整个表空间。
1) 创建一个新目录,并指定为wallet目录,注意目录在$ORACLE_BASE/admin/$ORACLE_SID 下面,不要随便指定路径,否则就会报ORA-28368错。
$ mkdir -p /u01/app/oracle/admin/orcl/wallet
设置wallet目录的方法很简单,编辑参数文件sqlnet.ora:
$ vi $ORACLE_HOME/network/admin/sqlnet.ora
加入以下信息,保存。
ENCRYPTION_WALLET_LOCATION=
(SOURCE=
(METHOD=file)
(METHOD_DATA=
(DIRECTORY=/u01/app/oracle/admin/orcl/wallet)
)
)
ENCRYPTION_WALLET_LOCATION参数的作用就是告知Wallet的实现方式和物理位置。上述示例中将/u01/app/oracle/admin/orcl/wallet目录作为主加密Key的存放位置。
2) 创建master key文件,指定wallet密码
使用SYS用户登陆,通过以下命令建立加密文件:
SQL> alter system set encryption key identified by "wjw";
其中,wjw为wallet密码。Oracle Wallet是一个可以打开关闭的功能组件,设置密码之后,只有通过密码口令可以启用wallet功能。
此时,在设置的目录下会多出一个ewallet.p12文件。这就是生成的master key文件。
3) 启动和关闭Wallet
启动Wallet:
SQL> alter system set encryption wallet open identified by "wjw";
关闭Wallet:
SQL> alter system set encryption wallet close identified by "wjw";
可以通过以下语句查询Wallet是否在打开状态:
SQL> select * from v$encryption_wallet;
在创建了主密匙后,可以在希望加密的列的名字后使用ENCRYPT关键字,来加密表列。
在创建表时加密列:
SQL> create table t
(id number primary key,
name varchar2(30) encrypt);
加密已有表中的某个列:
SQL> alter table employees modify (emp_id encrypt);
为表新增一个加密列:
SQL> alter table employees add (encrypt_id number(9) encrypt);
可以使用下列命令查看表中的加密列:
SQL> desc 表名称;
如果处于某种原因想关闭加密,则可以使用DECRYPT关键字:
SQL> alter table employees modify(emp_id decrypt);
1) 表空间加密的限制:
l 不能加密临时和撤销表空间
l 不能更改加密表空间的安全密匙
l 不能加密外部表
2) 加密表空间示例:
SQL> create tablespace wjw
datafile '/u01/app/oracle/oradata/orcl/wjw01.dbf' size 500m
encryption
default storage(encrypt);
其中encryption表时数据库使用默认的加密算法DES128,可以在encryption后面使用using子句来指定另外的算法,如:
SQL> create tablespace wjw
datafile '/u01/app/oracle/oradata/orcl/wjw01.dbf' size 500m
encryption using '3DES168'
default storage(encrypt);
3) 检查一个表空间是否加密:
SQL> select encrypted from dba_tablespaces where tablespace_name='WJW';
源:http://blog.itpub.net/26194851/viewspace-712641/