Oracle-11g 中使用表空间透明数据加密(TDE)
Oracle-11g 中使用表空间透明数据加密(TDE)的限制
TDE 表空间加密方式会在数据读写过程中加解密数据。与在 SQL 层面做加解密的 TDE 列加密方式相比,其限制要大幅减少。例如:数据类型、索引类型的限制。但 TDE 表空间加密方式仍存在如下限制:
(TDE tablespace encryption encrypts/decrypts data during read/write operations, as opposed to TDE column encryption, which encrypts/decrypts data at the SQL layer. This means that most restrictions that apply to TDE column encryption, such as data type restrictions and index type restrictions, are not applicable to TDE tablespace encryption.The following list includes the restrictions that apply to TDE tablespace encryption:)
(1).如 BFILE 等外部大型对象无法使用 TDE 表空间加密(External Large Objects (BFILEs) cannot be encrypted using TDE tablespace encryption. This is because these files reside outside the database.)
(2).无法使用 IMP/EXP 导入导出,只能使用过 IMPDP/EXPDP(To perform import and export operations, use Oracle Data Pump.)
Oracle-11g 中使用表空间透明数据加密(TDE)步骤
1.设置表空间主密钥(Master Encryption Key)
a.创建 wallet 目录(oracle,每个节点)
例如:创建 wallet 目录于 $ORACLE_BASE/admin/SID 下。
$> mkdir /u01/app/oracle/admin/zszracdb/wallet
b.指定 wallet 路径(oracle,每个节点)
在 sqlnet.ora 中设置 ENCRYPTION_WALLET_LOCATION 参数,指定软件 wallet 路径。其中,在 sqlnet.ora 文件中添加的条目如下。
ENCRYPTION_WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=/u01/app/oracle/admin/zszracdb/wallet)
)
)
c.创建主密钥(oracle,任一节点)
注意:TDE 列加密与 TDE 表空间加密使用一个统一的主密钥。
例如:创建密码为 password 的主密钥语句如下所示。
SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "password";
注意:对于 RAC 环境而言,需要在执行语句的节点上,将创建出来的主密钥文件拷贝至其他节点的对应目录下。
2.打开 Oracle wallet(oracle,任一节点)
在创建加密表空间之前,包含有表空间主密钥的 Oracle wallet 必须处于打开状态。
(1).先尝试关闭 Oracle wallet
SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "password";
(2).打开 Oracle wallet
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
(3).检验 Oracle wallet 状态
SQL> SELECT * FROM GV$ENCRYPTION_WALLET;
若 TDE 密钥打开,则显示类似如下结果。
![](https://images2015.cnblogs.com/blog/1031517/201706/1031517-20170628155219727-1899211147.png)
3.创建加密表空间(oracle,任一节点)
例如:创建加密数据表空间 JM_ZSZ_DATA 以及加密索引表空间 JM_ZSZ_IDX,语句类似如下。
SQL> CREATE TABLESPACE JM_ZSZ_DATA
DATAFILE '+DATA'
SIZE 1024M
ENCRYPTION USING 'AES128'
DEFAULT STORAGE(ENCRYPT);
SQL> CREATE TABLESPACE JM_ZSZ_IDX
DATAFILE '+DATA'
SIZE 1024M
ENCRYPTION USING 'AES128'
DEFAULT STORAGE(ENCRYPT);
4.验证加密表空间(oracle,任一节点)(可选)
可通过此步骤验证加密表空间是否真正有效。
a.创建测试表例如:创建加密表空间 JM_ZSZ_DATA 以及非加密表空间 BJM_ZSZ_DATA。随后分别在两个表空间内创建表 JM_TABLE 以及非加密表 BJM_DATA,语句类似如下。SQL> create table jm_table(col1 number, col2 varchar2(30)) tablespace jm_zsz_data;create table bjm_table(col1 number, col2 varchar2(30)) tablespace bjm_zsz_data;创建后分别插入测试数据。SQL> insert into jm_table values (1,'secret data');insert into bjm_table values (1,'no secret data');b.测试 Oracle wallet 不打开时的读取状态若 Oracle wallet 不打开,则无法读取加密表空间中的表,类似如下结果。
而非加密表读取正常,类似如下结果。c.测试数据文件保存形式通过 string 直接查看数据文件内容,如果非加密则可直接查见数据内容。对于加密数据文件,查询结果如下。注意:可见非以明文方式保存数据于 TDE 表空间加密的数据文件中。对于非加密数据文件,查询结果如下。
注意:可见正常的数据文件中,以明文形式保存数据。