为了安全起见,有时想对敏感数据加密,对其进行编码以保证授权用户才能理解它。可以使用的TDE(Transparent Data Encryption,透明数据加密)特性。使用Oracle钱夹存储密匙,数据库处理所有的加密和解密细节。Oracle Database允许加密表总的列,在Oracle Database中,可以加密整个表空间。
1、创建和管理Oracle钱夹
1)创建一个新目录,并指定为wallet目录
$ 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
(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';