博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle-11g 中使用表空间透明数据加密(TDE)
阅读量:5081 次
发布时间:2019-06-12

本文共 4053 字,大约阅读时间需要 13 分钟。

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_wallet 与 gv$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
ENCRYPTION USING 'AES128'
DEFAULT STORAGE(ENCRYPT);
SQL>  CREATE TABLESPACE JM_ZSZ_IDX
DATAFILE '+DATA'
SIZE 1024M
ENCRYPTION USING '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 id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

转载于:https://www.cnblogs.com/autopenguin/p/7229321.html

你可能感兴趣的文章
生活大爆炸之何为光速
查看>>
bzoj 2456: mode【瞎搞】
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
[GraphQL] Reuse Query Fields with GraphQL Fragments
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
两种最常用的Sticky footer布局方式
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Java程序IP v6与IP v4的设置
查看>>
RUP(Rational Unified Process),统一软件开发过程
查看>>
数据库链路创建方法
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
jQuery如何获得select选中的值?input单选radio选中的值
查看>>