Oracle钱夹的使用

为了安全起见,有时想对敏感数据加密,对其进行编码以保证授权用户才能理解它。可以使用OracleTDETransparent Data Encryption,透明数据加密)特性。使用Oracle钱夹存储密匙,数据库处理所有的加密和解密细节。Oracle Database 10g允许加密表的列,在Oracle Database 11g中,可以加密整个表空间。

1、创建和管理Oracle钱夹

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";

其中,wjwwallet密码。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;

2、加密数据列

在创建了主密匙后,可以在希望加密的列的名字后使用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);

3、加密表空间

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/

你可能感兴趣的:(Oracle钱夹的使用)