Oracle-11g 中使用表空间透明数据加密(TDE)

前端之家收集整理的这篇文章主要介绍了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,每个节点
$ORACLE_HOME/network/admin 下的sqlnet.ora 中设置ENCRYPTION_WALLET_LOCATION 参数,指定软件 wallet 路径。其中,在 sqlnet.ora 文件添加的条目如下。
ENCRYPTION_WALLET_LOCATION=
(SOURCE=
(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=/u01/app/oracle/admin/zszracdb/wallet)
)
)
c.检查 sqlnet.ora 信息读取状态(oracle,任一节点)
sql> select * from v$encryption_wallet;
select * from gv$encryption_wallet;
注意:确保 v$encryption_walletgv$encryption_wallet 的 wallet location 是 一致的
注意:对于 wallet 分别在不同节点的情况以及 sqlnet.ora 在加入 ENCRYPTION_WALLET_LOCATION 参数前已经被数据库各实例读取的情况,需要 重启各个实例以初始化 wallet 的状态,从而更新 gv$encryption_wallet 的 wallet location。
In the case of RAC environments,if a separate wallet is being used for each node and if the changes to the sqlnet.ora file are applied on all instances of a running RAC system,restarting the individual instances one by one is necessary to initially synchronize the wallet status and to update the view gv$encryption_wallet with the DIRECTORY entry from sqlnet.ora.
d.创建主密钥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 密钥打开,则显示类似如下结果。
3.创建加密表空间(oracle,任一节点)
例如:创建加密数据表空间 JM_ZSZ_DATA 以及加密索引表空间 JM_ZSZ_IDX,语句类似如下。
sql> CREATE TABLESPACE JM_ZSZ_DATA
DATAFILE '+DATA'
SIZE 1024M
ENCRYPTIONUSING 'AES128'
DEFAULT STORAGE(ENCRYPT);
sql> CREATE TABLESPACE JM_ZSZ_IDX
DATAFILE '+DATA'
SIZE 1024M
ENCRYPTIONUSING 'AES128'
DEFAULT STORAGE(ENCRYPT);
4.检查表空间属性(oracle,任一节点)
查看个表空间的加密属性,确定新建表空间为 TDE 加密表空间。
sql> SELECT tablespace_name,encrypted FROM dba_tablespaces;
5.验证加密表空间(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 表空间加密的数据文件中。
对于非加密数据文件查询结果如下。

注意:可见正常的数据文件中,以明文形式保存数据。
参考文档:
(1).《Step by step method to implement Transparent Data Encryption (TDE) in 11g Data Guard and 11g RAC environments (文档 ID 1627807.1)
(2).《Oracle Database Advanced Security Administrator's Guide》
- 8.Securing Stored Data Using Transparent Data Encryption

<wiz_tmp_tag contenteditable="false" style="display: none;">

猜你在找的Oracle相关文章