ORACLE WALLET用于存储安全证书信息和数据库的主密钥,具有认证和加密特性,可实现客户端自动登录数据库和透明数据加密(Transparent Data Encryption ,TDE)。所谓透明数据加密就是ORACLE数据库自己完成所有的加密和解密细节,对用户完全是透明的。本文基于CENTOS 5.6 + ORACLE 11g对使用ORACLE WALLET实现数据的透明加密进行了简单研究。
一、前提条件
在使用ORACLE WALLET进行数据加密之前,必须首先做好以下几个工作:
1、确定好ORACLE WALLET的路径。
可使用ORACLE WALLET默认的路径:$ORACLE_HOME/owm/wallets/oracle,也可在操作系统级自行创建路径,如:$ORACLE_BASE/admin/$ORACLE_SID/wallet。
2、修改 sqlnet.ora文件。
sqlnet.ora文件的默认位置是:$ORACLE_HOME/network/admin。利用vi编辑器对其进行编辑,确保它指向上步中确定好的ORACLE WALLET路径。
$vi sqlnet.ora
添加
ENCRYPTION_WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=/u01/app/oracle/admin/orcl/oracle)
)
)
3、用户授权。
打开和关闭WALLET需要用户拥有ALTER SYSTEM的权限。通过命令:SQL>SELECT * FROM USER_SYS_PRIVS;查看当前用户是否具有ALTER SYSTEM的权限,没有的话通过命令:SQL>GRANT ALTER SYTEM TO newuser;进行授权。
二、创建ORACLE WALLET
创建ORACLE WALLET有三种方式:通过OWM创建,在操作系统通过命令创建和通过SQL命令创建。
1、OWM(Oracle Wallet Manager)创建。在操作系统提示下直接输入owm启动Oracle Wallet Manager:$owm,按照向导选择路径(这里不需要增加信任证书),就可成功创建新的ORACLE WALLET了。
2、在操作系统通过命令创建。在操作系统提示下输入以下命令:
$mkstore –wrl $ORACLE_BASE/admin/$ORACLE_SID/wallet - create,其中$ORACLE_BASE/admin/$ORACLE_SID/wallet是自定义的WALLET目录。随后输入两次密码即可。
3、通过SQL命令创建。如下所示:
$sqlplus /nolog
SQL>conn / as sysdba
SQL>ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY “tiger”;(此处密码必须用双引号括起来)
以上三种方法的任意一种创建ORACLE WALLET后需要打开它,因为新创建的WALLET是关闭的:
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY “tiger”;
WALLET是数据库级别的,WALLET打开后,所有的session都可以使用WALLET了。
然后再手动生成主密钥。
SQL>ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY “tiger”;
三、加密表列
配置好ORACLE WALLET后,就可方便地加密表中的某一列数据。加密表列时需注意,若表列是外键成分或其他数据库的约束时就不能加密。
1、创建新表时加密某列。
SQL>CREATE TABLE Empt
2 (
3 Name VARCHAR2(30),
4 Emp_id NUMBER(10),
5 Salary NUMBER(10),
6 Credit NUMBER(10) ENCRYPT
7 );
此处,创建新表Empt同时使用默认的加密算法加密表列Credit。
2、已有表中增加新的加密列。
SQL>ALTER TABLE Empt ADD (ENCRYPT_ID NUMBER(5) ENCRYPT);
3、加密已有的表列。
SQL>ALTER TABLE Empt MODIFY (Salary NUMBER(10) ENCRYPT);
四、加密表空间
只有新的表空间能加密,默认加密算法是DES128。加密表空间的命令是:
SQL>CREATE TABLESPACE tbsp01
2 Datafile ‘/u02/app/oradata/tbsp01.dbf’ size 500m
3 ENCRYPTION
4 DEFAULT STORAGE(encrypt);
可通过以下命令查看表空间的加密状态:
SQL>SELECT tablespace_name, encrypted FROM dba_tablespaces;
五、加密RMAN备份集
透明数据加密是RMAN备份的默认加密方式,适用于存储、备份和恢复在同一台服务器。配置RMAN备份集的透明方式加密,在配置好ORACLE WALLET并打开WALLET的前提下,只需使用修改CONFIGURE 命令修改RMAN配置参数即可,如下所示:
RMAN>CONFIGURE ENCRYPTION FOR DATABASE ON;
以后所有的备份都将以加密方式进行。由于加密RMAN备份会增大系统开销,因此加密备份时最好分配多个通道。