当前位置: 首页 > 编程日记 > 正文

Oracle 11g 新特性 -- Transparent Data Encryption (透明数据加密TDE) 增强 说明


一.TransparentData Encryption (TDE:透明数据加密) 说明

Orace TDE 是Orcle 10R2中的一个新特性,其可以用来加密数据文件里的数据,保护从操作系统层面上对数据文件的访问。11g的TDE 在10gR2的基础上增强,允许在表空间级别进行加密。

1.1 11g 中TDE 新增功能

一些新增功能可增强透明数据加密(TDE)功能,这些功能是基于相同的基础结构构建的。

为支持TDE 而对LogMiner 所做的更改提供了用于更改捕获引擎的基础结构,这些引擎可用于逻辑备用、流和异步更改数据捕获。要让LogMiner 支持TDE,它必须能够访问加密Wallet。要访问该Wallet,必须装载实例并使Wallet 处于开启状态。LogMiner 不支持硬件安全模块(HSM) 或用户持有密钥。

对于逻辑备用,可在源或目标数据库挖掘日志,因此用于这两个数据库的Wallet 必须相同。

加密列的处理方式在流和基于流的更改数据捕获中均相同。将在Wallet 所在的源中挖掘重做记录。数据以未加密的方式传输到目标位置,然后在目标位置使用Wallet 进行加密。该数据可以使用高级安全选项在传输中进行加密以实现网络加密。

TDE 中的新增功能包括:

(1)  表空间加密

(2)  支持LogMiner

(3)  支持逻辑备用

(4)  支持流

(5)  支持异步更改数据捕获

(6)  基于硬件的主密钥保护

1.2 表空间加密

表空间加密以在写入时进行加密并在读取时进行解密的块级别加密技术为基础,并不在内存中对数据进行加密。影响加密的唯一因素与I/O 相关联。SQL 访问路径不变,并且支持所有数据类型。要使用表空间加密,加密Wallet 必须处于开启状态。

CREATETABLESPACE 命令包含一个用于设置加密属性的ENCRYPTION 子句,以及一个导致使用加密的ENCRYPT 存储参数。可以指定USING 'encrypt_algorithm' 来指示要使用的算法名称。有效的算法包括3DES168、AES128、AES192和AES256。默认算法为AES128。可以在V$ENCRYPTED_TABLESPACES 视图中查看这些属性。

加密的数据在执行操作(如JOIN 和SORT)期间会受到保护。这意味着数据在移动到临时表空间时是安全的。还原日志和重做日志中的数据也受到保护。

如果平台有相同的Endianess和Wallet,则加密的表空间是可移动的。

限制:

(1)  无法对临时表空间和还原表空间进行加密(所选的块已加密)。

(2)  Bfiles 和外部表未加密。

(3)  不支持跨不同的endian 平台移动表空间。

(4)  当前无法更改加密表空间的密钥。解决方法是:使用所需的属性创建一个表空间,然后将所有对象移动到新建的表空间中。

1.3 硬件安全模块

硬件安全模块(HSM) 是一种物理设备,可以安全地存储加密密钥。它还可以提供安全的计算空间(内存)以执行加密和解密操作。HSM 是Oracle wallet 的一种更安全的代替方法。

透明数据加密(TDE) 可使用HSM 来加强敏感数据的安全性。HSM 用于存储TDE 使用的主加密密钥。因为HSM 是一种物理设备而不是一个操作系统文件,所以在未授权的访问尝试中密钥是安全的。使用主加密密钥的所有加密和解密操作都在HSM 中执行。这意味着主加密密钥永远不会在不安全的内存中公开。

有些供应商可提供硬件安全模块,这些供应商还必须提供相应的库。

二.示例

更多测试参考:

Securing Stored Data Using Transparent DataEncryption

http://docs.oracle.com/cd/E11882_01/network.112/e10746/asotrans.htm

2.1 创建Wallet

在对LOB 进行加密的SecureFile中也会用到wallet。

Oracle 11g 新特性 -- SecureFiles 说明

http://blog.csdn.net/tianlesoftware/article/details/8231322

在sqlnet.ora 文件里添加: ENCRYPTION_WALLET_LOCATION 和WALLET_LOCATION参数。

默认位置是:$ORACLE_BASE/admin/$ORACLE_SID/wallet。

--指定ORACLEWALLET的位置这里使用ORACLE_HOME/network/admin,sqlnet.ora里添加如下内容

WALLET_LOCATION=

(SOURCE =

(METHOD = FILE)

(METHOD_DATA =

(DIRECTORY =/u01/app/oracle/product/11.2.0/db_1/network/admin)

)

)

ENCRYPTION_WALLET_LOCATION=

(SOURCE =

(METHOD = FILE)

(METHOD_DATA =

(DIRECTORY =/u01/app/oracle/admin/dave/encryption_wallet)

)

)

SQLNET.WALLET_OVERRIDE= TRUE

SSL_CLIENT_AUTHENTICATION= FALSE

SSL_VERSION =0

--添加完之后重启listener使参数生效。

--创建wallet包括设置密码、生成信任文件、并启动wallet

CONN / ASSYSDBA

-- 11g version

ALTER SYSTEMSET ENCRYPTION KEY IDENTIFIED BY "myPassword";

ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIEDBY "myPassword";

当实例重启后或者wallet被关闭后必须重新openwallets这样才能保护被加密的列.而在Open wallet之前,数据库必须处于mount 状态。 官网的说明如下:

 

The securityadministrator also needs to open the wallet before performing database recoveryoperations. This is because background processes may require access toencrypted redo and undo logs. When performing database recovery, the walletmust be opened before opening the database. This is illustrated in thefollowing statements:

SQL> STARTUP MOUNT;

SQL> ALTER SYSTEM SET ENCRYPTION WALLETOPEN IDENTIFIED BY "myPassword";

SQL> ALTER DATABASE OPEN;

当然也可以选择配置自动登陆wallets。 但oracle 并不推荐使用这种方法。

2.2 创建加密表空间

创建加密表空间使用ENCRYPTION 选项,通过USING 选项指定加密算法,默认使用AES128算法。注意,storage 选项必须指定ENCRYPT。 使用了表空间加密后就不允许使用NO SALT 选项。

    注意: 存在在加密表空间里的数据,我们不能直接通过HEX的编辑器或者strings命令直接查看数据文件里的内容。 而如果是普通的数据文件,我么可以直接在操作系统层面查看数据文件里的内容。

SQL> CREATE TABLESPACE encrypted_anqing

2  DATAFILE'/u01/app/oracle/oradata/dave/anqing01.dbf' SIZE 50M

3  AUTOEXTEND ON NEXT 10M

4  ENCRYPTION USING 'AES256'

5  DEFAULT STORAGE(ENCRYPT);

Tablespace created.

--查看表空间加密情况:

SQL> SELECT tablespace_name, encryptedFROM dba_tablespaces;

TABLESPACE_NAME                ENC

------------------------------ ---

SYSTEM                         NO

SYSAUX                         NO

UNDOTBS1                       NO

TEMP                           NO

USERS                          NO

ENCRYPTED_ANQING               YES

6 rows selected.

一般表空间不能转换成加密表空间。 可以使用export/import,alterdatabase…move… 或者create table …as select * from … 来进行转换。

2.3 测试表空间加密

SQL> CREATE TABLE dave (

2    id    NUMBER(10),

3    data  VARCHAR2(50)

4  )

5  TABLESPACE encrypted_anqing;

Table created.

SQL> CREATE INDEX idx_id ON dave(id)TABLESPACE encrypted_anqing;

Index created.

SQL> INSERT INTO dave (id, data) VALUES(1, 'This is a secret!');

1 row created.

SQL> COMMIT;

Commit complete.

SQL> select * from dave;

ID DATA

------------------------------------------------------------

1 This is a secret!

--flush buffer cache,确保数据刷入到数据文件:

SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;

System altered.

--当数据存放在加密的表空间之后,我们使用HEX editor,如UltraEdit,则不会显示我们的data,而普通表空间是可以直接查看的:

[oracle@dave/u01/app/oracle/oradata/dave]$strings anqing01.dbf|grep "secret"

[oracle@dave /u01/app/oracle/oradata/dave]$

--这里返回为空。

--验证非加密表空间:

SQL> create table dave2 tablespace usersas select * from dave;

Table created.

SQL> alter system flush buffer_cache;

System altered.

--注意: 这里对非加密表空间而言,我们可以直接查看加密的数据:

[oracle@dave/u01/app/oracle/oradata/dave]$strings users01.dbf|grep "secret"

This is a secret!

[oracle@dave /u01/app/oracle/oradata/dave]$

--删除加密表空间:

SQL> DROP TABLESPACE encrypted_anqingINCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.

2.4 列(Column)加密

SQL> conn dave/dave;

Connected.

SQL> create table dave as selectobject_id as id, object_name as name from dba_objects;

Table created.

SQL> desc dave

Name                                     Null?    Type

------------------------------------------------- ----------------------------

ID                                                NUMBER

NAME                                              VARCHAR2(128)

SQL> create index idx_dave_id ondave(id);

index created.

SQL> ALTER TABLE dave MODIFY (NAMEencrypt USING 'AES256' IDENTIFIED BY 'myPassword');

Table altered.

SQL> desc dave

Name                                     Null?    Type

------------------------------------------------- ----------------------------

ID                                                NUMBER

NAME                                              VARCHAR2(128) ENCRYPT

SQL> set lin 160

SQL> col WRL_PARAMETER FOR a50

SQL> SELECT * FROM V$ENCRYPTION_WALLET;

WRL_TYPE             WRL_PARAMETER                                      STATUS

---------------------------------------------------------------------- ------------------

file                /u01/app/oracle/admin/dave/encryption_wallet       OPEN

SQL> ALTER SYSTEM SET encryption walletCLOSE IDENTIFIED BY "myPassword";

System altered.

SQL> SELECT * FROM V$ENCRYPTION_WALLET;

WRL_TYPE             WRL_PARAMETER                                      STATUS

---------------------------------------------------------------------- ------------------

file                 /u01/app/oracle/admin/dave/encryption_wallet       CLOSED

--这里wallet 已经关闭。

--关闭之后查询,就会报错: wallet is not open

SQL> select * from dave where rownum=1;

select * from dave where rownum=1

*

ERROR at line 1:

ORA-28365: wallet is not open

--重新打开wallet,就可以查询加密的列了:

SQL> ALTER SYSTEM SET ENCRYPTION WALLETOPEN IDENTIFIED BY "myPassword";

System altered.

SQL> SELECT * FROM V$ENCRYPTION_WALLET;

WRL_TYPE             WRL_PARAMETER                                      STATUS

---------------------------------------------------------------------- ------------------

file                 /u01/app/oracle/admin/dave/encryption_wallet       OPEN

SQL> select * from dave where rownum=1;

ID NAME

---------- -------------------

20 ICOL$

---------------------------------------------------------------------------------------

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

Skype:    tianlesoftware

QQ:       tianlesoftware@gmail.com

Email:    tianlesoftware@gmail.com

Blog:     http://blog.csdn.net/tianlesoftware

Weibo:    http://weibo.com/tianlesoftware

Twitter:  http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware

转载于:https://www.cnblogs.com/tianlesoftware/archive/2012/12/07/3609128.html

相关文章:

[USACO07NOV]Cow Relays

mapfloyed矩阵乘法&#xff08;倍增floyed&#xff09; # include <stdio.h> # include <stdlib.h> # include <iostream> # include <algorithm> # include <string.h> # include <map> # define IL inline # define RG register # defin…

NCEPU:线下组队学习周报(011)

线下组队学习 经过一段时间的准备&#xff0c;我们组织的线下组队学习逐步进入正轨。欢迎华北电力大学保定校区的伙伴加入进来大家一起学习一起成长。 我们开展组队学习的内容为&#xff1a; &#xff08;1&#xff09;周志华的《机器学习》&#xff08;西瓜书&#xff09; …

java培训分享:学习java开发的优势是什么

想要进入到互联网行业的小伙伴&#xff0c;经常比较纠结学那个学科比较好&#xff0c;目前java、web前端、Python等都是非常热门的行业&#xff0c;前景也是比较好的&#xff0c;选择java学科的人比较多&#xff0c;那么学习java开发的优势是什么呢?来看看下面的详细介绍。 ja…

简述 clearfix 的原理

Demo Demo中的CSS中用到这样一个样式: .clearfix:after{content: ;display: block;clear: both; 复制代码 该样式通过::after选择器在选择元素之后插入content: 单引号中的内容&#xff0c;该内容不可被选定&#xff0c;例子中中插入内容为空。对这个空元素添加clear:both&…

判断dataset是否为空

最近在做一个搜索功能的时候,发现当用户搜索某些内容的时候,如果数据库有数据,就会显示在页面上.但是没有的时候呢,就一片空白,没有任何提示,觉得界面不友好.但是一时又不知道怎么判断dataset为空.网上找了一下,所以在这里写一下,方便自己以后复查.其实判断为空很简单,就这么写…

【Whalepaper】CV论文研读 - You Only Look One-level Feature (YOLOF), CVPR2021

Whalepaper是由周郴莲负责的一个每周分享论文的活动&#xff0c;带你研读AI领域的论文&#xff0c;快来一起开源学术科研吧&#xff01; NLP 论文分享&#xff1a;每周日 晚上 九点CV 论文分享&#xff1a; 每周日 晚上 九点Res 论文分享&#xff1a;每周六 晚上 九点半 欢迎…

Python培训分享:PyQT是什么?PyQt4和PyQt5的区别是什么?

今天小编为大家介绍的课程是关于Python培训方面的教程&#xff0c;主要讲的是PyQT是什么?PyQt4和PyQt5的区别是什么?来看看下面的详细介绍吧。 Python培训分享&#xff1a;PyQT是什么?PyQt4和PyQt5的区别是什么? QT是跨平台C库的集合&#xff0c;它实现高级API来访问现代桌…

linux 自学系列: 常用文件结构

/bin 二进制可执行命令  /dev 设备特殊文件  /etc 系统管理和配置文件  /etc/rc.d 启动的配置文件和脚本  /home 用户主目录&#xff0c;比如用户user的主目录就是/home/user&#xff0c;可以用&#xff5e;user表示  /lib 标准程序设计库&#xff08;动态链接共享库…

【青少年编程】【三级】海底寻宝

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

iOS更改AppIcon

前言 iOS 10.3出了挺多的新功能&#xff0c;其中有一个就是可以自定义更改AppIcon。这个功能以前我们只能在苹果的时钟上面看出来。但是一直没有对外开放。现在开放出来&#xff0c;也算是一种突破。 实现 苹果在iOS 10.3中&#xff0c;多了一个setAlternateIconName:completio…

软件测试培训分享:做软件测试需要掌握数据库的知识吗?

最近几年&#xff0c;学习软件测试的同学越来越多&#xff0c;大家对于“做软件测试需要掌握数据库的知识吗?”这个问题都比较关注&#xff0c;那么下面小编就来为大家做下详细的介绍。 软件测试培训分享&#xff1a;做软件测试需要掌握数据库的知识吗?我们知道做开发、做运维…

enumeration学习

import org.junit.Test;public class enumeration { Test public void test() { System.out.print(School.name"--> "); System.out.print(School.name.getvalue()" :"); System.out.println(School.name.info()); }}enum School { name("名字&quo…

Cocoa pods的安装

使用下面命令不能移除原生的SOURCESgem sources --remove https://rubygems.org/报错如下source https://rubygems.org/ not present in cache究其原因&#xff0c;可是我上次更新的时候中断了解决方法&#xff0c;少敲一个/(这是什么鬼)gem sources --remove https://rubygems…

【青少年编程】黄羽恒:漫天飞雪

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

学习软件测试发展前景怎么样?有前途吗?

学习软件测试发展前景怎么样?有前途吗?很多人都比较关心这个问题&#xff0c;因为最近要学习软件测试技术的同学越来越多&#xff0c;大家对于今后的工作都比较迷茫&#xff0c;那么针对这个问题&#xff0c;来看看下面的详细介绍就知道了。 学习软件测试发展前景怎么样?有前…

Hello Jsilk

我们选择这里作为学习和分享技术知识的一个平台&#xff0c;希望大家共同进步&#xff01; 1 (function(){ 2 alert(Hello Jsilk); 3 })(); 转载于:https://www.cnblogs.com/jsilk/archive/2012/12/10/2811255.html

js 使用 Lawnchair 存储 json 对象到本地

项目中用到储存点击记录的功能。 Lawnchair是一个轻量级的移动应用程序数据持久化存储方案&#xff0c;同时也是客户端JSON文档存储方法&#xff0c;优点是短小&#xff0c;语法简洁&#xff0c;扩展性比较好。 现在做HTML5移动应用除了LocalStorage的兼容性比较好之外&#xf…

邓林权:组队学习的那些事

自我介绍 大家好&#xff0c;我是邓林权&#xff0c;职业是数据营销&#xff0c;工作是以数据为主&#xff0c;通过数据进行决策。平时喜欢研究数据&#xff0c;领略数据的魅力&#xff0c;很荣幸能够和大家分享我参加组队学习的收获和故事。 组队学习经历 今年4月开始参加组…

软件测试培训分享:软件测试初期怎么面试工作?

学会了软件测试技术&#xff0c;那么大家后面接下来的准备工作就是面试找工作了&#xff0c;对于新手来说&#xff0c;面试软件测试这个岗位也是要有一些技巧的&#xff0c;下面小编就为大家介绍一下软件测试新手怎么面试工作? 软件测试培训分享&#xff1a;软件测试新手怎么面…

MySQL的正则表达式

1. Mysql的正则表达式仅仅使SQL语言的一个子集&#xff0c;可以匹配基本的字符、字符串。 例如&#xff1a;select * from wp_posts where post_name REGEXP hello&#xff0c;可以检索出列post_name中所有包含hello的行 REGEXP .og .是正则表达式中里一个特殊的字符。它表示…

Datawhale组队学习周报(第020周)

文章目录已经结营的开源内容即将结营的开源内容正在进行的开源内容七月排期的开源内容每周号外Whalepaper 招新公告本周&#xff08;06月21日~06月27日&#xff09;&#xff0c;第 25 期组队学习一共有 3 门开源课程&#xff0c;共组建了 3 个学习群&#xff0c;参与的学习者有…

EffectKeyMap系列1(Ubuntu)

说在前面 相信大多数人都会有这样的体验。当双手在键盘上一直打字或者写代码的时候&#xff0c;一次鼠标操作会让你崩溃。尤其是频繁使用鼠标的时候&#xff0c;工作效率会大幅下降。所以为了提高工作效率&#xff0c;我希望尽量少的使用鼠标。 以下我会总结我使用较高的几款软…

Python培训教程:pycharm常用的快捷键合集

本期Python培训教程&#xff1a;pycharm常用的快捷键合集&#xff0c;希望能在后面的学习和工作中给大家带来一些帮助&#xff0c;首先我们来了解一下什么是PyCharm?PyCharm是一种Python IDE&#xff0c;它不仅具备了一般IDE的功能&#xff0c;还提供了很多高级功能&#xff0…

JavaScript正则表达式基础知识汇总

一、创建正则对象&#xff1a; 1、构造函数RegExp创建正则对象 1 var pattern new RegExp(s$); //pattern匹配以s结尾的字符串 2、使用正则直接量 1 var pattern /s$/; //建议这样写 二、正则表达式字符 1、反斜线\ 在正则表达式中表示转义序列 特殊符号&#xff1a; ^ $ . *…

数据结构(严蔚敏)

说起为什么重新拿起这本书&#xff0c;着实非常惭愧。是因为面试的时候&#xff0c;第一个面试官面试完项目之后。第二面试官说我们就当聊聊天&#xff0c;考考数据结构&#xff0c;算法就好了。结果以一个问题就把我难住了&#xff0c;这个问题是&#xff1a;哈希表是什么&…

组队学习:学习者参考手册

学习者参考手册 作为希望参与组队学习活动的学习者&#xff0c;一定想了解有关本次活动的各种环节。我就通过这份手册来给大家介绍一下。 本手册一共分为四个部分&#xff0c;分别是活动角色划分&#xff0c;活动流程介绍、打卡环节介绍、角色职责介绍。 1. 大航海模型 航路…

软件测试培训适合什么人学习?

软件测试在互联网行业一直有着非常可观的发展前景&#xff0c;想要学习软件测试技术的人也越来越多&#xff0c;但不是所有人都可以学&#xff0c;都能学会的&#xff0c;小编下面就为大家详细的介绍一下软件测试培训适合什么人学习? 软件测试培训适合什么人学习?主要有以下几…

巧用组策略关闭危险端口

最直接的办法&#xff0c;把系统不用的端口都关闭掉&#xff0c;然后重新启动&#xff0c;如果杀毒软件还提示有漏洞攻击&#xff0c;你来找我. 注&#xff1a;关闭的端口有&#xff0c;135&#xff0c;137&#xff0c;138&#xff0c;139&#xff0c;445&#xff0c;1025&…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 8. 软间隔与支持向量回归

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 航路开辟者&#xff1a;谢文睿、秦州开源内容&#xff1a;https://githu…

软件测试培训分享:如何划分bug的严重级别

软件测试工程师在工作中&#xff0c;最常见的就是遇见bug&#xff0c;那么所有的bug都是有轻重缓急的&#xff0c;如何划分bug的严重级别呢?本期软件测试培训分享教程就为大家做下详细的介绍。 软件测试培训分享&#xff1a;如何划分bug的严重级别?Bug的严重级别指的是软件缺…