SlideShare una empresa de Scribd logo
1 de 8
Descargar para leer sin conexión
Oracle10g
高级安全特性:列加密技术


    by Maclean.liu
          liu.maclean@gmail.com
      www.oracledatabase12g.com
About Me

l Email:liu.maclean@gmail.com
l Blog:www.oracledatabase12g.com
l Oracle Certified Database Administrator Master 10g
and 11g
l Over 6 years experience with Oracle DBA technology
l Over 7 years experience with Linux technology
l Member Independent Oracle Users Group
l Member All China Oracle Users Group
l Presents for advanced Oracle topics: RAC,
DataGuard, Performance Tuning and Oracle Internal.
在 Oracle 10g 中出现了 column encryption 列加密特性,通过对列上的数据加密实现数据安全性的目的。当然实
现这一加密特性是有代价的,一方面会导致所加密列数据每行所占磁盘空间字节数增长,另一方面会消耗更多的
cpu 和内存资源。




当使用 Oracle 的 TDE(transparent data encryption)加密数据表的某一列时将导致该表上每行数据所占用的空间大
致增加 33-51 个字节,这几十个字节用作以下用途:



    • 其中 20 个字节用以对加密值的完整性检查,该部分可以通过’nomac’选项来省略



    • 同时加密会填补加密值到 16 个字节(如果列本身长度不够的话),举例来说如果是 9 个字节长度的
       number 类型,那么加密该 number 字段时就会需要将该数据填补到 16 个字节,也就是额外地多用了
       7 个字节




    • 加密时默认采用 salt 选项(default),salt 是指一串长度为 16 个字节的随机 string,在数据被正式加密
       前这串 string 将会被添加到列上,这种做法使得黑客无法通过比对已知的密文来匹配加密值(steal
       patterns of ciphertext to known ciphertext);salt 总是位于加密数据的末尾;该部分可以通过 no
       salt 选项来省略。




注意默认使用 salt 选项加密的列是不能创建索引的,所以强烈建议加密列时强制使用 no salt 选项!加密列上的索
引不支持范围扫描操作(Range scans on encrypted columns can’t use index),而加密表空间(encryption
tablespace)没该限制。




SQL> create table enctab (t1 int encrypt);
Table created.


SQL>   create index ind_enc on enctab(t1);
create index ind_enc on enctab(t1)
*
ERROR at line 1:
ORA-28338: Column(s) cannot be both indexed and encrypted with salt
SQL> create table news (t1 varchar2(1) encrypt);
Table created.


/*以默认的 salt 和 mac 选项创建示例用表 */


SQL> insert into news values('1');
1 row created.


SQL> commit;
Commit complete.


/* 该列本身的长度为 1 个字节 */


SQL> select dump(t1,16) from news;


DUMP(T1,16)
--------------------------------------------------------------------------------
Typ=1 Len=1: 31


/* 以下为该行的 dump 信息,可以看到加密值增长到了 52 字节 */
col   0: [52]
de 76 08 74 2a c0 e3 94 89 e6 a8 3b 22 54 ca e5 af 4d eb a0 26 a7 e5 c2 f5
c0 e5 3a a0 09 9a 08 fa 56 2a 92 a0 83 b3 7f 0b 99 03 ad 12 78 d4 03 ec 6e
b3 c2




针对加密列可以使用’nomac’和 no salt 选项来减少性能损耗,其中’no mac’选项用以允许 Oracle 省略在加密数据
中产生和存放 message authentication code(MAC,信息验证代码),如上文所述的这部分代码用以对加密值的完
整性检查,会占用 20 个字节的空间。通过使用’nomac’选项可以有效较少加密和后续操作所额外消耗的 cpu 周
期,同时为加密值的存储减少 20 个字节的开销。
另外 no salt 选项用以省略加密中加入的 16 个字节的随机字符串(string),在能保证列值都唯一的情况下(攻击者无
法通过已知密文比对的方式来解密),使用该选项可以有效减少 cpu 周期和每个单元 16 字节的空间开销。



oracledatabase12g.com>create table Maclean (t1 varchar2(16) encrypt no salt 'nomac');


/* 注意这里的 nomac 要被单引号括起来 */


oracledatabase12g.com>alter table table_name modify column_name encrypt [using ] [no
salt] ['nomac'];




此外目前列加密不支持外键约束,造成这种限制的原因是每张表都有其唯一的密钥(encryption key);而表空间加
密则不存在这种限制,即便某个从属表不在加密表空间上。




SQL> create table man (t1 int primary key );
Table created.


SQL> create table woman(t1 int encrypt);
Table created.


SQL>   alter table woman add constraint fk foreign key(t1) references man(t1);

alter table woman add constraint fk foreign key(t1) references man(t1)

                            *
ERROR at line 1:
ORA-28335: referenced or referencing FK constraint column cannot be encrypted
列加密特性对于表连接(table joining)来说是透明的,即便作为连接条件的列被加密了也是如此(join tables is
transparent,even if the columns for join condition are encrypted)。同时分区键是不能作为加密列的,否则将出现
ORA-28346: an encrypted column cannot serve as a partitioning column 错误。
此外加密列索引存在诸多限制,总结加密列索引(Indexes On Encrypted Columns)的几个 restrictions:



      1. 只有使用 no salt 选项加密的列上才允许创建索引

      2. 加密列上不支持位图索引

      3. 加密列不支持外键

      4. 加密列上创建的索引只能做等式查询,因为不能做 Range scan 所以如 between,like 等非等式查询是
            不支持的;这种限制是由于索引中的数据也被加密了,所以实际上数据是以加密后的形式来排序的。所
            有非等式查询的条件均无法利用到索引,而使用全表扫描。

      5. 如果应用不使用等式查询的话,那么建议不要在加密列上创建索引,因为这样无益与性能,反而会增加
            性能开销。




而加密表空间(TDE Tablespace Encryption)不存在以上关于索引的限制,甚至在加密表空间上的表的索引在非加
密表空间上也不会影响其使用,包括 Range Scans;显然这一点出乎许多人的意料:




SQL> select tablespace_name,ENCRYPTED from dba_tablespaces   where tablespace_name in
('ENC','USERS');
TABLESPACE_NAME                ENC
------------------------------ ---
ENC                            YES
USERS                          NO


SQL> create table tv tablespace enc as select * from dba_objects;
Table created.


SQL> create index pk_tv on tv(object_id) tablespace enc;
Index created.


SQL> set autotrace on;
SQL> select 1 from tv where object_id=9999;

        1
----------

        1
Execution Plan
----------------------------------------------------------
Plan hash value: 2009574168
--------------------------------------------------------------------------
| Id    | Operation         | Name   | Rows   | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|     0 | SELECT STATEMENT |         |     1 |     13 |     1   (0)| 00:00:01 |
|*    1 |   INDEX RANGE SCAN| PK_TV |      1 |     13 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------

    1 - access("OBJECT_ID"=9999)


/* 将该索引移动至非加密表空间上 */


SQL> alter index pk_tv rebuild tablespace users;
Index altered.


SQL> select 1 from tv where object_id=9999;


       1
----------

       1


Execution Plan
----------------------------------------------------------
Plan hash value: 2009574168
--------------------------------------------------------------------------
| Id    | Operation         | Name   | Rows   | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|     0 | SELECT STATEMENT |         |     1 |     13 |     1   (0)| 00:00:01 |
|*    1 |   INDEX RANGE SCAN| PK_TV |      1 |     13 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------


Predicate Information (identified by operation id):
---------------------------------------------------

    1 – access("OBJECT_ID"=9999)




/* 可以看到虽然索引被移动到非加密表空间上但仍可以被利用到并 range scan */
SQL> create bitmap index obj_typ on tv (object_type) tablespace users;
Index created.


/* 创建位图索引也没有问题 */




当然表空间加密也仍然存在一些限制:

   • 加密表空间不能使用传统的 exp/imp 工具导入导出,而只能使用 datapump 工具

   • 显然 External Large Objects (BFILEs)这种存储在数据库外的外部大对象也不受支持。




© 2011, www.oracledatabase12g.com. 版权所有.文章允许转载,但必须以链接方式注明源地址,否则追求法律责
任.

Más contenido relacionado

La actualidad más candente (9)

CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)CKAN 技術介紹 (基礎篇)
CKAN 技術介紹 (基礎篇)
 
MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashback
 
第三届阿里中间件性能挑战赛冠军队伍答辩
第三届阿里中间件性能挑战赛冠军队伍答辩第三届阿里中间件性能挑战赛冠军队伍答辩
第三届阿里中间件性能挑战赛冠军队伍答辩
 
CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresql
 
Row Set初步学习V1.1
Row Set初步学习V1.1Row Set初步学习V1.1
Row Set初步学习V1.1
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 

Destacado

Interaction southamerica10 difficultdialogues_e_davies
Interaction southamerica10 difficultdialogues_e_daviesInteraction southamerica10 difficultdialogues_e_davies
Interaction southamerica10 difficultdialogues_e_davies
Eleanor Davies
 
使用Prm恢复受损的oracle数据表几个例子
使用Prm恢复受损的oracle数据表几个例子使用Prm恢复受损的oracle数据表几个例子
使用Prm恢复受损的oracle数据表几个例子
maclean liu
 
Fluence vs. dose approach waligorski
Fluence vs. dose approach waligorskiFluence vs. dose approach waligorski
Fluence vs. dose approach waligorski
Leishman Associates
 
Property-based Access of RDF Data
Property-based Access of RDF DataProperty-based Access of RDF Data
Property-based Access of RDF Data
Gerd Groener
 
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案
maclean liu
 
Evaluating my poster
Evaluating my posterEvaluating my poster
Evaluating my poster
abcdsmile
 
Innovation in joint health command clinical governance murphy
Innovation in joint health command clinical governance  murphyInnovation in joint health command clinical governance  murphy
Innovation in joint health command clinical governance murphy
Leishman Associates
 
Legionella sampling
Legionella samplingLegionella sampling
Legionella sampling
indus329
 
Real world attenuation of foam earplugs- smith
Real world attenuation of foam earplugs- smithReal world attenuation of foam earplugs- smith
Real world attenuation of foam earplugs- smith
Leishman Associates
 
Myeloma conference presentation november 2012
Myeloma conference presentation   november 2012Myeloma conference presentation   november 2012
Myeloma conference presentation november 2012
Jason Potts
 

Destacado (20)

Ais life #2_2010
Ais life #2_2010Ais life #2_2010
Ais life #2_2010
 
Interaction southamerica10 difficultdialogues_e_davies
Interaction southamerica10 difficultdialogues_e_daviesInteraction southamerica10 difficultdialogues_e_davies
Interaction southamerica10 difficultdialogues_e_davies
 
使用Prm恢复受损的oracle数据表几个例子
使用Prm恢复受损的oracle数据表几个例子使用Prm恢复受损的oracle数据表几个例子
使用Prm恢复受损的oracle数据表几个例子
 
Fluence vs. dose approach waligorski
Fluence vs. dose approach waligorskiFluence vs. dose approach waligorski
Fluence vs. dose approach waligorski
 
Property-based Access of RDF Data
Property-based Access of RDF DataProperty-based Access of RDF Data
Property-based Access of RDF Data
 
Devon house
Devon houseDevon house
Devon house
 
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案
基于Oracle 12c data guard & far sync的低资源消耗两地三数据中心容灾方案
 
Become a Social Business: How Intuit is leveraging Social Media
Become a Social Business: How Intuit is leveraging Social MediaBecome a Social Business: How Intuit is leveraging Social Media
Become a Social Business: How Intuit is leveraging Social Media
 
Evaluating my poster
Evaluating my posterEvaluating my poster
Evaluating my poster
 
Innovation in joint health command clinical governance murphy
Innovation in joint health command clinical governance  murphyInnovation in joint health command clinical governance  murphy
Innovation in joint health command clinical governance murphy
 
Edsel ayes-20-year-marketing-plan
Edsel ayes-20-year-marketing-planEdsel ayes-20-year-marketing-plan
Edsel ayes-20-year-marketing-plan
 
botox London
botox Londonbotox London
botox London
 
Legionella sampling
Legionella samplingLegionella sampling
Legionella sampling
 
Granland2
Granland2Granland2
Granland2
 
22tribes.com - 22 ways we help organisations grow, experiment, measure and in...
22tribes.com - 22 ways we help organisations grow, experiment, measure and in...22tribes.com - 22 ways we help organisations grow, experiment, measure and in...
22tribes.com - 22 ways we help organisations grow, experiment, measure and in...
 
Introduction SEAL programme
Introduction SEAL programmeIntroduction SEAL programme
Introduction SEAL programme
 
Real world attenuation of foam earplugs- smith
Real world attenuation of foam earplugs- smithReal world attenuation of foam earplugs- smith
Real world attenuation of foam earplugs- smith
 
Myeloma conference presentation november 2012
Myeloma conference presentation   november 2012Myeloma conference presentation   november 2012
Myeloma conference presentation november 2012
 
Tarea 7 herramientas tic
Tarea 7 herramientas ticTarea 7 herramientas tic
Tarea 7 herramientas tic
 
180 westcare
180 westcare180 westcare
180 westcare
 

Similar a Oracle10g高级安全特性列加密技术

分区表基础知识培训
分区表基础知识培训分区表基础知识培训
分区表基础知识培训
maclean liu
 
Oracle数据库高级安全选件ASO介绍
Oracle数据库高级安全选件ASO介绍Oracle数据库高级安全选件ASO介绍
Oracle数据库高级安全选件ASO介绍
jenkin
 
Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期
yiditushe
 
A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步
WASecurity
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
pwesh
 
百度分布式数据实践与进展
百度分布式数据实践与进展百度分布式数据实践与进展
百度分布式数据实践与进展
yp_fangdong
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器
Leyi (Kamus) Zhang
 
11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay
maclean liu
 
Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿
yiditushe
 
为10g rac cluster添加节点
为10g rac cluster添加节点为10g rac cluster添加节点
为10g rac cluster添加节点
maclean liu
 
A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题
WASecurity
 

Similar a Oracle10g高级安全特性列加密技术 (20)

分区表基础知识培训
分区表基础知识培训分区表基础知识培训
分区表基础知识培训
 
Oracle数据库高级安全选件ASO介绍
Oracle数据库高级安全选件ASO介绍Oracle数据库高级安全选件ASO介绍
Oracle数据库高级安全选件ASO介绍
 
oracle优化器星型转换
oracle优化器星型转换oracle优化器星型转换
oracle优化器星型转换
 
Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期
 
A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
 
百度分布式数据实践与进展
百度分布式数据实践与进展百度分布式数据实践与进展
百度分布式数据实践与进展
 
Oracle Security 101
Oracle Security 101Oracle Security 101
Oracle Security 101
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & development
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast share
 
11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay
 
真正读懂oracle sql执行计划execution plan v20131025
真正读懂oracle sql执行计划execution plan v20131025真正读懂oracle sql执行计划execution plan v20131025
真正读懂oracle sql执行计划execution plan v20131025
 
Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿Itpub电子杂志第四期第二稿
Itpub电子杂志第四期第二稿
 
为10g rac cluster添加节点
为10g rac cluster添加节点为10g rac cluster添加节点
为10g rac cluster添加节点
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践
 
A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题
 
imobile-beta技术沙龙
imobile-beta技术沙龙imobile-beta技术沙龙
imobile-beta技术沙龙
 
Orclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wang
Orclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wangOrclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wang
Orclrecove 1 pd-prm-dul testing for oracle database recovery_20141030_biot_wang
 

Más de maclean liu

Shoug at apouc2015 4min pitch_biotwang_v2
Shoug at apouc2015 4min pitch_biotwang_v2Shoug at apouc2015 4min pitch_biotwang_v2
Shoug at apouc2015 4min pitch_biotwang_v2
maclean liu
 
Apouc 4min pitch_biotwang_v2
Apouc 4min pitch_biotwang_v2Apouc 4min pitch_biotwang_v2
Apouc 4min pitch_biotwang_v2
maclean liu
 
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1
maclean liu
 
Oracle prm安装说明
Oracle prm安装说明Oracle prm安装说明
Oracle prm安装说明
maclean liu
 

Más de maclean liu (20)

Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践
 
Oracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアル
Oracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアルOracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアル
Oracle専用データ復旧ソフトウェアprm dulユーザーズ・マニュアル
 
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
 
TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例
 
PRM DUL Oracle Database Health Check
PRM DUL Oracle Database Health CheckPRM DUL Oracle Database Health Check
PRM DUL Oracle Database Health Check
 
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
 
Vbox virtual box在oracle linux 5 - shoug 梁洪响
Vbox virtual box在oracle linux 5 - shoug 梁洪响Vbox virtual box在oracle linux 5 - shoug 梁洪响
Vbox virtual box在oracle linux 5 - shoug 梁洪响
 
【诗檀软件】Mysql高可用方案
【诗檀软件】Mysql高可用方案【诗檀软件】Mysql高可用方案
【诗檀软件】Mysql高可用方案
 
Shoug at apouc2015 4min pitch_biotwang_v2
Shoug at apouc2015 4min pitch_biotwang_v2Shoug at apouc2015 4min pitch_biotwang_v2
Shoug at apouc2015 4min pitch_biotwang_v2
 
Apouc 4min pitch_biotwang_v2
Apouc 4min pitch_biotwang_v2Apouc 4min pitch_biotwang_v2
Apouc 4min pitch_biotwang_v2
 
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1
使用Oracle osw analyzer工具分析oswbb日志,并绘制系统性能走势图1
 
诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础
 
诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24
诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24
诗檀软件 – Oracle数据库修复专家 oracle数据块损坏知识2014-10-24
 
追求Jdbc on oracle最佳性能?如何才好?
追求Jdbc on oracle最佳性能?如何才好?追求Jdbc on oracle最佳性能?如何才好?
追求Jdbc on oracle最佳性能?如何才好?
 
使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践
使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践
使用Virtual box在oracle linux 5.7上安装oracle database 11g release 2 rac的最佳实践
 
Prm dul is an oracle database recovery tool database
Prm dul is an oracle database recovery tool   databasePrm dul is an oracle database recovery tool   database
Prm dul is an oracle database recovery tool database
 
Oracle prm dul, jvm and os
Oracle prm dul, jvm and osOracle prm dul, jvm and os
Oracle prm dul, jvm and os
 
Oracle dba必备技能 使用os watcher工具监控系统性能负载
Oracle dba必备技能   使用os watcher工具监控系统性能负载Oracle dba必备技能   使用os watcher工具监控系统性能负载
Oracle dba必备技能 使用os watcher工具监控系统性能负载
 
Parnassus data recovery manager for oracle database user guide v0.3
Parnassus data recovery manager for oracle database user guide v0.3Parnassus data recovery manager for oracle database user guide v0.3
Parnassus data recovery manager for oracle database user guide v0.3
 
Oracle prm安装说明
Oracle prm安装说明Oracle prm安装说明
Oracle prm安装说明
 

Oracle10g高级安全特性列加密技术

  • 1. Oracle10g 高级安全特性:列加密技术 by Maclean.liu liu.maclean@gmail.com www.oracledatabase12g.com
  • 2. About Me l Email:liu.maclean@gmail.com l Blog:www.oracledatabase12g.com l Oracle Certified Database Administrator Master 10g and 11g l Over 6 years experience with Oracle DBA technology l Over 7 years experience with Linux technology l Member Independent Oracle Users Group l Member All China Oracle Users Group l Presents for advanced Oracle topics: RAC, DataGuard, Performance Tuning and Oracle Internal.
  • 3. 在 Oracle 10g 中出现了 column encryption 列加密特性,通过对列上的数据加密实现数据安全性的目的。当然实 现这一加密特性是有代价的,一方面会导致所加密列数据每行所占磁盘空间字节数增长,另一方面会消耗更多的 cpu 和内存资源。 当使用 Oracle 的 TDE(transparent data encryption)加密数据表的某一列时将导致该表上每行数据所占用的空间大 致增加 33-51 个字节,这几十个字节用作以下用途: • 其中 20 个字节用以对加密值的完整性检查,该部分可以通过’nomac’选项来省略 • 同时加密会填补加密值到 16 个字节(如果列本身长度不够的话),举例来说如果是 9 个字节长度的 number 类型,那么加密该 number 字段时就会需要将该数据填补到 16 个字节,也就是额外地多用了 7 个字节 • 加密时默认采用 salt 选项(default),salt 是指一串长度为 16 个字节的随机 string,在数据被正式加密 前这串 string 将会被添加到列上,这种做法使得黑客无法通过比对已知的密文来匹配加密值(steal patterns of ciphertext to known ciphertext);salt 总是位于加密数据的末尾;该部分可以通过 no salt 选项来省略。 注意默认使用 salt 选项加密的列是不能创建索引的,所以强烈建议加密列时强制使用 no salt 选项!加密列上的索 引不支持范围扫描操作(Range scans on encrypted columns can’t use index),而加密表空间(encryption tablespace)没该限制。 SQL> create table enctab (t1 int encrypt); Table created. SQL> create index ind_enc on enctab(t1); create index ind_enc on enctab(t1) * ERROR at line 1: ORA-28338: Column(s) cannot be both indexed and encrypted with salt
  • 4. SQL> create table news (t1 varchar2(1) encrypt); Table created. /*以默认的 salt 和 mac 选项创建示例用表 */ SQL> insert into news values('1'); 1 row created. SQL> commit; Commit complete. /* 该列本身的长度为 1 个字节 */ SQL> select dump(t1,16) from news; DUMP(T1,16) -------------------------------------------------------------------------------- Typ=1 Len=1: 31 /* 以下为该行的 dump 信息,可以看到加密值增长到了 52 字节 */ col 0: [52] de 76 08 74 2a c0 e3 94 89 e6 a8 3b 22 54 ca e5 af 4d eb a0 26 a7 e5 c2 f5 c0 e5 3a a0 09 9a 08 fa 56 2a 92 a0 83 b3 7f 0b 99 03 ad 12 78 d4 03 ec 6e b3 c2 针对加密列可以使用’nomac’和 no salt 选项来减少性能损耗,其中’no mac’选项用以允许 Oracle 省略在加密数据 中产生和存放 message authentication code(MAC,信息验证代码),如上文所述的这部分代码用以对加密值的完 整性检查,会占用 20 个字节的空间。通过使用’nomac’选项可以有效较少加密和后续操作所额外消耗的 cpu 周 期,同时为加密值的存储减少 20 个字节的开销。
  • 5. 另外 no salt 选项用以省略加密中加入的 16 个字节的随机字符串(string),在能保证列值都唯一的情况下(攻击者无 法通过已知密文比对的方式来解密),使用该选项可以有效减少 cpu 周期和每个单元 16 字节的空间开销。 oracledatabase12g.com>create table Maclean (t1 varchar2(16) encrypt no salt 'nomac'); /* 注意这里的 nomac 要被单引号括起来 */ oracledatabase12g.com>alter table table_name modify column_name encrypt [using ] [no salt] ['nomac']; 此外目前列加密不支持外键约束,造成这种限制的原因是每张表都有其唯一的密钥(encryption key);而表空间加 密则不存在这种限制,即便某个从属表不在加密表空间上。 SQL> create table man (t1 int primary key ); Table created. SQL> create table woman(t1 int encrypt); Table created. SQL> alter table woman add constraint fk foreign key(t1) references man(t1); alter table woman add constraint fk foreign key(t1) references man(t1) * ERROR at line 1: ORA-28335: referenced or referencing FK constraint column cannot be encrypted
  • 6. 列加密特性对于表连接(table joining)来说是透明的,即便作为连接条件的列被加密了也是如此(join tables is transparent,even if the columns for join condition are encrypted)。同时分区键是不能作为加密列的,否则将出现 ORA-28346: an encrypted column cannot serve as a partitioning column 错误。 此外加密列索引存在诸多限制,总结加密列索引(Indexes On Encrypted Columns)的几个 restrictions: 1. 只有使用 no salt 选项加密的列上才允许创建索引 2. 加密列上不支持位图索引 3. 加密列不支持外键 4. 加密列上创建的索引只能做等式查询,因为不能做 Range scan 所以如 between,like 等非等式查询是 不支持的;这种限制是由于索引中的数据也被加密了,所以实际上数据是以加密后的形式来排序的。所 有非等式查询的条件均无法利用到索引,而使用全表扫描。 5. 如果应用不使用等式查询的话,那么建议不要在加密列上创建索引,因为这样无益与性能,反而会增加 性能开销。 而加密表空间(TDE Tablespace Encryption)不存在以上关于索引的限制,甚至在加密表空间上的表的索引在非加 密表空间上也不会影响其使用,包括 Range Scans;显然这一点出乎许多人的意料: SQL> select tablespace_name,ENCRYPTED from dba_tablespaces where tablespace_name in ('ENC','USERS'); TABLESPACE_NAME ENC ------------------------------ --- ENC YES USERS NO SQL> create table tv tablespace enc as select * from dba_objects; Table created. SQL> create index pk_tv on tv(object_id) tablespace enc; Index created. SQL> set autotrace on; SQL> select 1 from tv where object_id=9999; 1 ---------- 1
  • 7. Execution Plan ---------------------------------------------------------- Plan hash value: 2009574168 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 13 | 1 (0)| 00:00:01 | |* 1 | INDEX RANGE SCAN| PK_TV | 1 | 13 | 1 (0)| 00:00:01 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("OBJECT_ID"=9999) /* 将该索引移动至非加密表空间上 */ SQL> alter index pk_tv rebuild tablespace users; Index altered. SQL> select 1 from tv where object_id=9999; 1 ---------- 1 Execution Plan ---------------------------------------------------------- Plan hash value: 2009574168 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 13 | 1 (0)| 00:00:01 | |* 1 | INDEX RANGE SCAN| PK_TV | 1 | 13 | 1 (0)| 00:00:01 | -------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 – access("OBJECT_ID"=9999) /* 可以看到虽然索引被移动到非加密表空间上但仍可以被利用到并 range scan */
  • 8. SQL> create bitmap index obj_typ on tv (object_type) tablespace users; Index created. /* 创建位图索引也没有问题 */ 当然表空间加密也仍然存在一些限制: • 加密表空间不能使用传统的 exp/imp 工具导入导出,而只能使用 datapump 工具 • 显然 External Large Objects (BFILEs)这种存储在数据库外的外部大对象也不受支持。 © 2011, www.oracledatabase12g.com. 版权所有.文章允许转载,但必须以链接方式注明源地址,否则追求法律责 任.