Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10329105
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: Oracle

2011-12-27 18:03:02

Oracle数据安全解决方案
透明数据加密TDE
[日期:2011-12-05] 来源:Linux社区  作者:Arup Nanda 
 
 
不写一行代码,透明的加密敏感数据!
 

   
 
 
 
这可能是你的公司最恐怖的噩梦:有人偷走了数据库的备份磁带!当然,你可能构造了一个安全的系统,加密了最敏感的资产,然后围绕数据库服务器建了一圈防火墙来保护。但是,小偷却采取了最简单的方法:他偷走了备份磁带,在另外一个服务器上恢复数据库、启动了数据库,然后他就可以边喝咖啡边从容的浏览数据了。
 
保护数据以防这种小偷不只是一个好的实践,同时也是很多法律、规则、方针的要求,你如何保护你的数据库以防止这种漏洞呢?
 
                                           
 
一种解决方法是在数据库中将敏感数据加密,然后将加密密钥存储在一个不同的地方,这样即使数据被盗也是没有用的。然而,你必须在两个互相矛盾的概念间进行平衡:应用程序访问加密密钥的方便性、防止密钥被盗的安全性。为了能够遵从公司和政府的规章制度,你需要一个快速的解决方案,而不需要进行复杂的编码。
 
                                           
 
Oracle 10g R2提供了一个新的特性,让你只需要做如下动作:你可以不写一行代码,只需要声明你需要加密某列。当用户插入数据的时候,数据库透明的加密数据然后存储加密后的数据。同样的,当用户读取数据时,数据库自动进行节目。由于加解密操作对应用程序来说都是透明的,不需要应用程序修改代码,因此这个特性就叫做:透明数据加密(TDE)。
 
 
 
1 TDE如何工作?
 
                                           
 
我在January/February 2005 issue of Oracle Magazine上提到了Oracle 10g数据库加密的基本原理。现在我们概述一下关键点:加密时你需要应用一个加密算法和一个加密密钥对明文输入的数据进行加解密操作;为了能够成功的解密,你必须知道加密采用的算法和密钥。
 
                                           
 
在那篇文章中,我描述了如何使用Oracle提供的加密工具来构建一个加密框架。然而,使用Oracle 10g R2数据库和TDE,你将不需要自己构建这样一个框架。你所要做的只是定义需要加密的列,Oracle 10g数据库将为包含加密列的表创建一个私密(译者注:用户不需要知道)的安全加密密钥,然后采用你指定的加密算法加密指定列的明文数据。
 
                                           
 
这种机制下,保护表的加密密钥(以下简称“表密钥”)就显得非常重要了。Oracle 10g通过一个master密钥来对表密钥进行加密。master密钥保存在一个叫做“钱夹(wallet)”的安全的地方,钱夹可以是数据库服务器上的一个文件,加密的表密钥保存在数据字典中。
 
                                           
 
当用户插入数据到需要加密的列中的时候,Oracle 10g从钱夹中获取master密钥,用master密钥解密数据字典中的表密钥,然后用解密后的表密钥加密输入数据,再将加密后的数据保存在数据库中。如下图1所示:
 
 
 
 
图1:TDE工作原理
 
你可以加密表的部分或者所有列,例如一个表有4列,如上图1所示,第2列和第3列被加密,但Oracle只会生成一个表级的加密密钥,然后用这个密钥加密所有的加密列。在磁盘上,第1列和第4列是明文存储的,第2列和第3列是加密存储的。由于数据是加密存储的,所有后续的组建例如备份和归档日志,都是加密的格式。
 
                                           
 
当用户查询一个加密列的时候,Oracle 10g透明的(译者注:用户不可感知)将加密的表密钥从数据字典中取出,再取出master密钥,然后解密表密钥,再用解密后的表密钥来解密磁盘上加密的数据,最后返回明文给用户。
 
                                           
 
通过这种加密数据的方式,即使保存在磁盘上的数据被盗,由于master密钥并没有被盗,没有master密钥的情况下,数据无法被获取。即使“钱夹(wallet)”被盗,如果没有钱夹密码(译者注:TDE涉及3个密码,一个是钱夹密码,用来启动钱夹;一个是master密钥,用来加解密表密钥;一个是表密钥,用来加解密数据,钱夹密码是用户手工输入的,master密钥和表密钥是系统管理的),master密钥还是无法获取。因此,即使窃贼盗取了磁盘或者数据文件的拷贝,也无法解密数据。这样做满足了很多规则和指南的要求,而所有的这些并不需要修改应用程序或者编写复杂的加密和密钥管理系统。
 
                                           
 
接下来我将向你展示如何开启和使用TDE。
 
                                            
 
1.1 一次安装
 
                                           
 
你第一次使用TDE时,必须1)指定“钱夹”的位置,2)设置钱夹密码,3)打开钱夹。
 
                                    
 
指定钱夹位置
 
                                           
 
当你第一启用TDE,必须创建钱夹。缺省情况下,钱夹创建于$ORACLE_BASE/admin/$ORACLE_SID/wallet目录下。因此,如果$ORACLE_BASE是/u01/app/oracle且$ORACLE_SID是SWBT4,则钱夹将存储在/u01/app/oracle/admin/SWBT4/wallet目录下。你也可以通在位于$ORACLE_HOME/network/admin目录下的sqlnet.ora文件中指定的方式选择一个不同的目录。例如:如果你想讲钱夹放在/orawall目录下,在sqlnet.ora文件中写入如下内容:
 
                                           
 
ENCRYPTION_WALLET_LOCATION =
 
 (SOURCE=
 
   (METHOD=file)
 
     (METHOD_DATA=
 
       (DIRECTORY=/orawall)))
 
                                           
 
在如下的样例中,我们将假设钱夹位于缺省的位置下。你也应该在常规的备份中包含钱夹。
 
                                           
 
创建钱夹
 
                                           
 
现在,你必须创建钱夹,而且必须设定访问密码。为了能够完成此操作,通过如下的操作给一个用户赋予特权(privilege):
 
                                           
 
alter system set encryption key
 
authenticated by "remnant";
 
                                           
 
这条命令完成如下功能:
 
在步骤1中指定的目录下创建了一个钱夹
设定了钱夹的密码为“remnant”
打开了用于TDE存储和获取master密钥的钱夹
钱夹密码是大小写敏感的且必须用双引号括起来。密码“remnant”在任何动态性能视图或者日志中都不会显示为明文。
 
                                           
 
打开钱夹
 
                                           
 
由于钱夹只需要创建一次,因此上面的两个步骤只需要执行一次。钱夹必须显式的在数据库启动后打开。当你创建钱夹的同时钱夹也被打开了。当创建钱夹且设定密码后,每次打开数据库的时候,你都必须使用密码按照如下方式打开钱夹:
 
                                           
 
alter system set encryption wallet open authenticated by "remnant";
 
                                           
 
你可以通过如下方式关闭钱夹:
 
                                           
 
alter system set encryption wallet close;
 
                                           
 
为了TDE能够正常工作,钱夹必须被打开。如果钱夹被关闭,你还是可以访问没有加密的列,但不能够访问加密的列。
 
                                           
 
1.2 加密列
 
                                           
 
为了使用TDE加密列,所有你需要做的只是在定义列的时候增加一个简单的谓词“ENCRYPT”。在定义之前,理所当然的你需要决定采用什么样的加密算法和密钥长度。详细讨论请参考我前面提到的文章“Encrypt Your Data Assets”。
 
 
 
在一个常规的schema中,假设你有一个如下定义的名称为“account”表:
 
                                           
 
ACC_NO      NUMBER
 
ACC_NAME    VARCHAR2(30)
 
SSN         VARCHAR2(9)
 
                                           
 

目前表的所有数据是明文的,你想转换SSN列为加密的,因此SSN保存了敏感的“社会保险号”,你可以通过如下方式设定:
 
                                           
 
alter table accounts modify (ssn encrypt);
 
                                           
 

这条语句完成了如下两件事:
 
为表创建了一个表密钥,如果你修改同一个表中的另外的列为加密的,将会使用同一个表密钥
将所有列的值转换为加密的形式
 
这条语句并不修改数据类型或者列的长度,也不创建触发器或者视图。
 
                                           
 
缺省情况下采用192位密钥长度的AES算法。你也可以选择不同的算法,只需要在SQL命令中指定即可。例如,如果要使用128位的AES算法,你可以采用如下语句:
 
                                           
 
alter table accounts modify (ssn encrypt using 'AES128');
 
                                            
 
你可以使用AES128、AES192、AES256、或者3DES168。这些值是自解释的,例如:AES256指采用AES算法、256位长度的密钥。
 
                                            
 
加密列之后,当查看表的时候你可以看到如下信息:
 
                                           
 
SQL> desc accounts
 
 
 
Name           Null?         Type
 
------------   ------------   --------------------------------------------------
 
ACC_NO                       NUMBER
 
ACC_NAME                     VARCHAR2(30)
 
SSN                          VARCHAR2(9) ENCRYPT
 
                                           
 

需要注意的是ENCRYPT关键字在数据类型之后。如果需要查找数据库中加密的列,你可以在数据字典视图中搜索DBA_ENCRYPTED_COLUMNS(TDE不能在SYS所有的表中启用).
 
                                           
 
2 性能考虑
 
                                           
 

由于加解密消耗CPU,因此你必须考虑性能的影响。当你访问表中不加密的列时,性能和不使用TDE的表没有任何差别。只有在访问加密列的时候,会有小的性能负担,包括查询加密列和插入加密列,因此你也许想有选择的加密列。
 
                                            
 
如果你不再需要对一个列加密,你可以通过如下方式关闭加密功能:
 
                                            
 
alter table account modify (ssn decrypt);
 
                                           
 

索引的使用也必须考虑。在上面的样例中,让我们假设在SSN列上有一个叫做in_accounts_ssn的索引。如果针对ACCOUNT表的查询有一个相等的谓词,如下所示:
 
                                            
 
select * from accounts
 
where ssn = '123456789';
 
                                           
 

这样in_accounts_ssn就会用到。如果用LIKE谓词来代替,如下所示:
 
                                            
 
select * from accounts
 
where ssn like '123%';
 
                                           
 

则索引不会被用到,而会采用整表扫描的方式。原因很简单,索引的B-树结构保证了具有相同前缀的值—例如"fraternal", "fraternity"等等在物理上是相邻的。当处理LIKE谓词时,Oracle 10g通过模式匹配来搜索索引入口(entry),物理上相邻有助于加快索引搜索速度,这样也比整表扫描要好一些。
 
然而,如果列被加密了,索引上实际的值就完全不一样了(因为它们被加密了),因此原来相邻的数据被分散在整个索引上了。这样导致索引扫描笔整表扫描更加消耗性能。因此对于LIKE谓词,Oracle 10g将忽略索引,而直接采用整表扫描。
 
                                            
 
在相等匹配的谓词情况下,搜索指定索引取代了按值进行模式匹配,所以使用索引执行比整表扫描要更快,数据库优化器会选择使用索引。
 
                                            
 
当你决定加密某列,考虑加密如何影响索引,而且要特别小心你可能想重写涉及加密列的特定查询。
 
                                            
 
3密钥和密码管理
 
                                           
 

万一有人得到了表密钥,或者你怀疑某人可能已经破解了加密的表密钥,你该如何操作?
 
你可以简单的为表创建一个新的密钥,换句话说就是重新生成密钥,然后通过如下语句将所有加密列用新密码重新进行加密。你也许会想选择另外一个算法进行加密,例如AES256,你可以通过如下方式同时完成两件事:
 
                                           
 
alter table accounts rekey using 'aes256';
 
                                           
 

万一有人得到了钱夹的密码怎么办呢?
 
                                            
 
你可以通过Oracle Wallet Manager修改钱夹密码,在命令行中输入OWM即可调用如下GUI工具。从顶上的菜单选择Wallet -> Open并且选择你指定的钱夹的位置,然后给出钱夹密码,选择Wallet -> Change Password修改钱夹密码。需要说明的是修改钱夹的密码不会修改master密钥。
 
 
 
 
 
 
 
图2:Oracle Wallet Manager
 
                                           
 
4 如何处理“Salt”
 
      
 
 
 
加密是关于如何隐藏数据的,但是如果原始的明文数据有很多重复的数据时,有时很容易能够猜出加密数据的原始值。例如,一个关于薪水信息的表将包含很多重复的值,这种情况下,加密后的值也是一样的。一个入侵者能够确定同一薪水的所有索引入口。为了防护这种情况,将“salt”加入到数据中使得即使原始值相同的数据加密后具有不同的加密值。TDE缺省情况下应用了“salt”技术。
 
                                            
 
如果你准备在一个加密的列上创建索引,因此你不能包含“salt”。通过以下方式可以将“salt”从SSN列上移除:
 
                                            
 
alter table accounts modify
 
(ssn encrypt no salt);
 
                                           
 

如果你准备在一个包含“salt”的加密列上创建索引,你将得到一个错误提示,就像下面的样例所示:
 
                                            
 
SQL> create index in_acc_01
 
on accounts (ssn);
 
 
 
ORA-28338: cannot encrypt indexed column(s) with salt
 
                                           
 

当你准备加密一个包含“salt”的列时,你将会得到同样的错误。同样的,如果列上有一个隐含的索引,例如列是主键的一部分,或者列被定义为unique,你将也不能使用加密。以此推断,当一个列是外键的一部分时,你也不能使用salt。
 
                                            
 
5 导出TDE加密数据
 
                                           
 

缺省情况下,如果你使用EXPDP工具导出一个拥有加密列的表,在导出文件(dump file)中列是明文的,即使列定义为加密也是如此。如下命令导出ACCOUNTS表(包括加密的列),将会返回一个警告:
 
                                            
 
$ expdp arup/arup tables=accounts
 
 
 
ORA-39173: Encrypted data has been stored unencrypted in dump file set.
 
                                           
 

当然,这只是一个警告,不是错误,数据还是会被导出。
 
                                            
 
为了在数据导出文件中保护你的加密的列数据,你可以在导出表的时候通过密码保护机制来保护导出文件。这个密码通过在EXPDP命令中的ENCRYPTION_PASSWORD参数指定,且只会应用到本次导出,这个不是“钱夹”的密码(译者注:和TDE没有关系)。如下清单演示了在EXPDP命令中加上“pooh”密码。需要注意的是清单1中的密码并不会显示为“pooh”,而是通过*号来隐藏。最终导出来的dump文件中将不会看到通过TDE加密的列的明文数据了。
 
                                            
 
代码清单1:导出密码保护的dump文件
 
                                            
 
$ expdp arup/arup ENCRYPTION_PASSWORD=pooh tables=accounts
 
 
 
Export: Release 10.2.0.0.0 - Beta on Friday, 01 July, 2005 16:14:06
 
 
 
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
 
 
 
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.0.0 - Beta
 
With the Partitioning, OLAP and Data Mining options
 
Starting "ARUP"."SYS_EXPORT_TABLE_01":  arup/******** ENCRYPTION_PASSWORD=********* tables=accounts
 
Estimate in progress using BLOCKS method...
 
Processing ...
 
                                           
 

当你导入加密的dump文件时,你也必须提供同样的密码,代码清单2显示了如何操作:
 
                                            
 
代码清单2:导入密码保护的dump文件
 
 
 
$ impdp arup/arup ENCRYPTION_PASSWORD=pooh tables=accounts table_exists_action=replace
 
 
 
Import: Release 10.2.0.0.0 - Beta on Friday, 01 July, 2005 16:04:20
 
 
 
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
 
 
 
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.0.0 - Beta
 
With the Partitioning, OLAP and Data Mining options
 
Master table "ARUP"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
 
Starting "ARUP"."SYS_IMPORT_TABLE_01":  arup/******** ENCRYPTION_PASSWORD=********* table_exists_action=replace
 
Processing ...
 
                                           
 

如下样例展示了在导入的时候不输入ENCRYPTION_PASSWORD参数时的结果:
 
                                            
 
$ impdp arup/arup tables=accounts
 
      
 
ORA-39174: Encryption password must
 
be supplied.
 
The following shows the result if you provide the wrong password:
 
$ impdp arup/arup ENCRYPTION_PASSWORD
 
=piglet tables=accounts
 
 
 
ORA-39176: Encryption password is
 
incorrect.
 
                                           
 

注意:原有的导出工具EXP无法导出有加密列的表。
 
                                            
 
6 总结
 
                                           
 

保护你的数据使其免遭攻击且使其符合数不清的管理业务相关的法律不是一件微不足道的事情。TDE让你快速的提供数据加密功能,并且不需要任何代码和复杂的密钥管理就能够符合这些法律,因此你可以更多的聚焦你的战略成就!
 
                                            
 
更多学习
 
更多加密信息
 
oracle.com/technology/oramag/oracle/05-jan/o15security.html
 
 
更多TDE信息
 
Oracle Database Advanced Security Administrator's Guide
 
 
 
7 补充
 
除了对列进行加密外,Oracle TDE还可以对表空间进行加密,至于何时选择对列进行加密,何时选择对表空间加密,请另外搜索。
 

·         什么是Oracle Database Vault?
 
·         Oracle Database Vault组成部分
 
·         Oracle Database Vault遵循哪些规范
 
·         Database Vault应对哪些内部威胁
 
·         Oracle Database Vault允许制定灵活的安全策略
 
·         Oracle Database Vault如何应对数据库联合
 
1.1  什么是Oracle Database Vault?
Oracle Database Vault能够限制任何用户访问数据库中的特定区域,包括拥有管理(administrative)权限在内的用户,例如,你可以限制管理员访问员工薪水、客户医疗记录、或者其他敏感信息。
 
这样你就可以针对你的敏感数据以多种方式来应用细粒度的访问控制,它加固Oracle数据库实例,同时加强了分离传统高权限用户职责的这个业界最佳实践。更重要的是,它使你的数据免遭特权用户损坏,同时又允许他们维护Oracle数据库。Oracle Database Vault是你的企业不可分割的一部分。
 
通过Oracle Database Vault,你可以解决现在仍然是最困难的安全问题:保护数据免遭内部威胁,满足通常的合规要求,加强职责隔离。
 
你可以配置Oracle Database Vault去管理独立的Oracle数据库实例的安全。你可以安装Oracle Database Vault到一个独立的Oracle数据库设备上、多个Oracle home下、以及Oracle RAC环境中。
 
更多关于Oracle Database Vault的FAQ请访问如下链接:
 
 
更多OTN上关于Oracle Database Vault的信息请访问如下链接:
 
 
1.2  Oracle Database Vault组成部分
Oracle Database Vault包含如下部分:
 
·         Oracle Database Vault 访问控制组件
 
·         Oracle Database Vault 管理员组件(DVA)
 
·         Oracle Database Vault配置助手(DVCA)
 
·         Oracle Database Vault DVSYS和 DVF Schemas
 
·         Oracle Database Vault PL/SQL接口和开发包
 
·         Oracle Database Vault和Oracle Label Security PL/SQL APIs
 
·         Oracle Database Vault 监控和报告工具
 
1.2.1   Oracle Database Vault访问控制组件
Oracle Database Vault使你能够创建如下组件来保护你的数据库实例的安全:
 
·         域:域是需要被保护的数据库schemal、对象、角色的一个功能上的集合。例如:你可以将和账户、销售、或者人力资源相关的数据库schemal、对象、角色组成一个域。当你将这些组成一个域后,你可以使用域来控制赋给特定账户或者角色的系统权限的使用。这样你就可以给任何想使用这些数据库schemal、对象、角色的用户提供细粒度的访问控制。Chapter 4, "Configuring Realms" 详细讨论了域。.
 
·         命令规则:命令规则是一个特殊的规则,通过这个规则,你可以控制用户如何执行他们能够执行的几乎所有的SQL语句,包括SELECT, ALTER SYSTEM, database definition language (DDL), 和data manipulation language (DML)语句.命令规则必须和规则集一起决定某个语句是否允许执行。Chapter 6, "Configuring Command Rules" 详细讨论了规则集.
 
·         因素:因素是一个命名变量或者属性,例如用户位置、数据库IP地址、会话用户,这些因素是Oracle Database Vault能够识别和保护的。你可以针对用户活动使用这些因素,例如授权数据库账户链接到数据库,或者创建过滤逻辑条件来限制数据的可见性和可管理性。每个因素可以包含一个或者多个标识,标识是因素的具体的值。一个因素可以包含多个标识,这取决于因素的检索方法或者它的映射逻辑。Chapter 7, "Configuring Factors" 详细讨论了因素.
 
·         规则集:规则集是一个或者多个规则的集合,你可以将规则集和一个域的授权、命令规则、因素指派、或者安全应用角色关联起来。规则集基于其中的每个规则的计算值以及规则的计算方式(所有为真或者任意为真)。规则集中的规则是一个结果为“true”或“false”的PL/SQL表达式。Chapter 5, "Configuring Rule Sets"详细讨论了规则集。
 
·         安全应用角色:一个安全应用角色是一个特殊的Oracle数据库角色,它可以基于Oracle database vault规则集的计算结果激活。Chapter 8, "Configuring Secure Application Roles for Oracle Database Vault"详细讨论了安全应用角色。
 
为了加强这些组件的功能,Oracle Database vault提供了一系列的PL/SQL接口和包。"Oracle Database Vault PL/SQL Interfaces and Packages" 提供了一个概括的介绍.
 
通常情况下,你要做的第一步是创建一个包含你想保护的schema或者数据库对象的域,然后你就可以通过创建规则、命令规则、因素、标识、规则集、安全应用角色来保护你的域。除此以外,你可以运行报告工具来报告这些组件监控和保护的活动。Chapter 3, "Getting Started with Oracle Database Vault"提供了一个简单的指南,可以使你熟悉Oracle Database Vault的功能,Chapter 16, "Oracle Database Vault Reports"提供了更多关于如何运行报告来检查配置和其它Oracle Database Vault 完成的活动。
 
1.2.2   Oracle Database Vault管理员(DVA)
Oracle Database Vault 管理员是一个基于Oracle Database Vault的PL/SQL API构建的Java程序。这个程序可以让不熟悉PL/SQL接口的安全管理者通过友好的用户界面来配置访问控制策略。Oracle Database Vault管理员程序提供了众多的安全相关的报告,这些报告可以帮助了解基准的安全配置。这些报告同时也有助于指出与基准配置相比,当前配置有哪些变化。
 
Chapter 4 到 Chapter 9解释了如何通过Oracle database Vault管理员程序来配置访问策略, 以及如何将Oracle Database Vault与其它Oracle产品集成起来. Chapter 16, "Oracle Database Vault Reports" 解释了Oracle Database Vault报告.
 
1.2.3   Oracle Database Vault 配置助手 (DVCA)
为了执行维护任务,可以使用命令行工具Oracle Database Vault配置助手(DVCA).更多信息请参考Appendix C, "Postinstallation Oracle Database Vault Procedures".
 
1.2.4   Oracle Database Vault DVSYS and DVF Schemas
Oracle Database Vault 提供了DVSYS这个schema来存储所有需要Oracle Database Vault保护的数据库对象。DVSYS schema包含角色、视图、账户、函数、以及其它Oracle Database Vault使用的数据库对象。DVF schema包含一些公共函数,这些函数用于从Oracle Database Vault访问控制配置中读取因素值的集合。
 
Chapter 10, "Oracle Database Vault Objects" 详细描述了这两个schema.
 
1.2.5   Oracle Database Vault PL/SQL 接口和包
Oracle Database Vault提供了一个PL/SQL接口和包,让安全管理员或者应用程序开发者按需配置访问控制策略。PL/SQL存储过程和函数使得普通的数据库账户能够在一个数据库会话上下文中在访问控制策略边界里进行操作。
 
参考Chapter 14, "Using the Oracle Database Vault PL/SQL Interfaces" and Chapter 11, "Using the DVSYS.DBMS_MACADM Package"获取更多信息.
 
1.2.6   Oracle Database Vault 和Oracle Label Security PL/SQL APIs
Oracle Database Vault提供了能够和Oracle Label Security集成的访问控制能力。Oracle Label Security是和Oracle Enterprise Manager Database Control集成的,Oracle Enterprise Manager Database Control能够让安全管理员定义应用到数据库对象的标签安全策略。Oracle Label Security同样提供了一组可以供数据库应用程序开发者用来提供标签安全策略的PL/SQL API
 
参考 "Integrating Oracle Database Vault with Oracle Label Security" 获取更多关于Oracle Database Vault和Oracle Label Security如何配合的信息. 参考 Oracle Label Security Administrator's Guide 获取更多关于Oracle Policy Manager的信息.
 
1.2.7   Oracle Database Vault 报告和监控工具
你可以根据Oracle Database Vault监控的不同的活动来生成报告,你可以监控策略的改变、异常的安全尝试、数据库配置和结构的变化。
 
参考 Chapter 16, "Oracle Database Vault Reports" 获取更多关于你可以生成的报告的信息. Chapter 15, "Monitoring Oracle Database Vault" 解释了如何监控Oracle Database Vault.
 
1.3  Oracle Database Vault遵循哪些规范
对规章制度的顺从的一个最大的好处是安全意识。历史上,关于信息技术部门的关注重点在可获得性和性能上面,而对遵守规章制度的关注要求每个人退后一步,然后从安全的角度看看他们的IT基础设施、数据库、应用程序。通常的问题包括:
 
·         谁能够访问这些信息?
 
·         敏感信息存储在哪里?
 
法律法规如Sarbanes-Oxley Act, Health Insurance Portability and Accountability Act (HIPAA), International Convergence of Capital Measurement and Capital Standards: a Revised Framework (Basel II), Japan Privacy Law, Payment Card Industry Data Security Standard (PCI DSS), and the European Union Directive on Privacy and Electronic Communications都含有一些常见的主题,例如内部控制、职责分离,以及访问控制。
 
然而,对于像Sarbanes-Oxley and HIPAA这些法规来说,最大的挑战是程序上的,剩余的部分可能需要技术投资。法律规章中一个常见的安全需求是严厉的内部控制。Oracle Database Vault能够帮助组织达到要求的程度随不同的法律规章而变化。通常情况下,Oracle Database Vault域、职责分离、命令集、因素总体上有助于减少全世界的法律规章规定的安全威胁。
 
Table 1-1列出了法律规章给出的潜在的安全威胁
 
Table 1-1法律规章给出的潜在的安全威胁
 
Regulation
 Potential Security Threat
 
Sarbanes-Oxley Section 302
 未经授权修改数据
 
Sarbanes-Oxley Section 404
 修改数据,未经授权访问
 
Sarbanes-Oxley Section 409
 拒绝服务,未经授权访问
 
Gramm-Leach-Bliley
 未经授权访问, 修改,查看
 
Health Insurance Portability and Accountability Act (HIPAA) 164.306
 未经授权访问
 
HIPAA 164.312
 未经授权访问
 
Basel II – Internal Risk Management
 未经授权访问
 
CFR Part 11
 未经授权访问
 
Japan Privacy Law
 未经授权访问
 
EU Directive on Privacy and Electronic Communications
 未经授权访问
 
Payment Card Industry Data Security Standard (PCI DSS)
 未经授权修改数据
 
 
 
 
1.4  Database Vault应对哪些内部威胁
多年来,蠕虫、病毒,和外部入侵者(黑客)被认为是计算机系统最大的威胁。不幸的是,经常被忽视的是可信用户以及特权用户可能盗窃或者修改数据。
 
Oracle Database Vault使用域、因素、命令规则来应对内部威胁。这些手段合起来提供强大的安全工具来帮助保护对数据库、应用程序、敏感数据的访问。你可以结合规则和因素来控制在什么样的条件下数据库命令能够被执行,控制被域保护的数据的访问。例如,你可以基于IP地址、时间日期、特定的应用程序来创建规则和因素来控制对数据的访问。这样可以限制只能由满足条件的连接才能够访问数据,以此来防止未经授权访问应用数据和为经授权的应用访问数据库。
 
Oracle Database Vault提供一些内置的因素,你可以将其与规则结合来控制数据库访问、域保护应用、以及数据库内部的命令。
 
你可以将规则以及因素和几十个数据库内部命令关联起来,提供更强的数据库内部控制。你可以定制这些手段来满足你的操作策略。例如,你可以定义一个规则来限制特定IP地址特定主机名称运行ALTER SYSTEM语句。
 
1.5  Oracle Database Vault允许制定灵活的安全策略
Oracle Database Vault可以帮助你为你的数据库设计灵活的安全策略。例如,任何具有DBA角色的数据库用户,如SYSTEM,能够修改数据库的基本参数。加入一个有系统特权的菜鸟管理员决定启动新的redo log文件,但是他并没有意识到在特定的时间进行那样操作会导致数据库出问题。通过Oracle Database Vault,你可以创建一个限制使用ALTER SYSTEM SWITCH LOGFILE的命令规则来防止这样的用户做这样的操作。
 
除此以外,你也可以将规则绑定到命令规则上,以此来多方面的限制活动,例如,按照如下方式限制语句的执行:
 
·         按照时间(例如,只能在周五下午4~5点执行)
 
·         只能本地访问, 即不允许远程访问
 
·         按照IP地址(例如,只允许每个特定范围的IP地址访问)
 
通过这种方式,你可以很小心的控制和保护你的系统。你可以按照你的需要激活或者禁止命令规则,你也可以通过Oracle Database Vault管理员工具非常容易的集中维护命令规则。
 
1.6  Oracle Database Vault如何应对数据库联合
Oracle的客户拥有数百甚至数千分布在企业或者全球的数据库。因此,数据库合并在未来的几年将持续作为一个成本节约策略。分布式的数据库架构提供的物理安全在合并环境中也必须具备。Oracle Database Vault提出了关于数据库合并的主要关注点。
 
Figure 1-1 表明了Oracle Database Vault 如何应对这些关注点:
 
·         管理特权账户访问应用数据: 这种情况下,Oracle Database Vault 防止DBA访问由FIN域保护的schema。尽管DBA是最强大和可信的用户,但DBA并不需要访问数据库中的应用数据。
 
·         应用数据访问的职责分离: 这种情况下,由Oracle Database Vault 创建的,FIN域拥有者,能够访问FIN域的schema.
 
Figure 1-1 Oracle Database Vault 安全

Description of "Figure 1-1 Oracle Database Vault Security"
 
数据库合并导致很多强大的用户账号驻留在单个数据库中。这意味着除了整个数据库的DBA,各个应用schema的拥有者也具有强大的特权。废除一些特权将反过来影响已有的应用。通过Oracle Database Vault域,你可以通过可信路径、防止未经授权的用户使用特权查看数据两个手段来加强对应用数据的访问。例如,可以防止拥有SELECT ANY TABLE特权的DBA使用这个特权来查看应用数据。
 

企业安全挑战
 
满足合规性的规章制度,以及降低安全危害的风险,是现在安全方面面临的TOP挑战。通过对众多的安全事故的审查,可以发现适时的对审计数据进行审查有助于在早期发现未经授权的活动,且有助于减少财务上的影响。各种各样政府和学术机构进行的研究和调查已经得出了这个结论:相当大比例的数据入侵是由内部人员干的,即这些人至少是在某种级别上被授权访问系统和数据的。
 

     
 
大家熟知的法规如SOX(中文叫萨班斯法案)、HIPAA,以及行业规范如PCI-DSS等使得信息保护成为企业的排在首位的事情。随着安全威胁变得更加复杂,监控正逐渐成为“纵深防御”(译者注:美国NSA提出的一种用于保护信息产品和系统的安全架构,类似于一个射击靶)结构的一个重要部分。现在,使用审计数据作为安全资源仍然大部分是一个手工操作过程:要求管理员和审计人员手工从多个地方收集审计数据。
 
Oracle Audit Vault
 
Oracle Audit Vault通过自动将审计数据合并到一个安全的数据仓库,使得能够更加有效的进行监控和报告。Oracle Audit Vault是一个强大的解决方案,它提供了安全的数据仓库、内置的报告功能、事件告警、以及职责分离的功能。
 
基于Oracle业界领先的技术,Oracle Audit Vault使用了Oracle数据安全来端到端的保护审计数据。Oracle Audit Vault通过使用Oracle的分区和压缩技术来达到很好的可扩展性。Oracle Audit Vault最新的发布版本提供了加强版的“开箱即用”的合规报告和审计集合,且支持Microsoft SQL Server 2000 and 2005数据库。
             
 
Oracle Audit Vault的核心是一个安全数据仓库,它是基于Oracle的业界领先数据仓库技术构造的,并且由Oracle的业界领先的安全产品保护的。内置的报告和事件告警减少了包括1)发现潜在问题 2)证明强制的控制是有效和正在工作的时间和人力,从而有助于企业改进他们遵守外部法规和内部政策的能力。
 
通过Oracle Audit Vault的控制台,数据安全管理员和审计员能够管理、对比、以及提供Oracle数据库审计的设置,从而降低整体维护成本。
 
合规和安全报告
 
Oracle Audit Vault提供了强大的内置的报告来监控一系列广泛的活动,包括特权用户活动和数据库结构的变化。报告提供了可视化的活动,且提供了关于4W(who,what,when,where)的详细信息。最新版的Oracle Audit Vault提供了一个令人兴奋的基于一系列流行的Oracle Application Express技术的新的报告接口。新的报告提供了容易使用的界面,通过界面可以创建彩色图标,且能够定制报告的格式。报告列能够被重新组织,也能够被删除。规则可以放到自动高亮指定行的地方,这样使得用户能够快速的识别可疑或者未授权的活动。报告将包含来自Oracle和Microsoft SQL Server数据库的审计信息,提供整个企业的活动的整体图示。Oracle Audit Vault提供了众多的标准的审计评估报告,这些报告归类到某一领域,例如合规性报告和警告。
 
         
 
“开箱即用”的报告包含数据库账户管理、角色和特权、对象管理、登录失败的信息。Oracle Business Intelligence, Oracle BI Publisher以及其它第三方报告工具可以用来构建满足特定法规和安全需求的额外的报告。详细的关于数据仓库的表的信息可以参考Oracle Audit Vault管理员指南。
 
安全和监控告警
 
Oracle Audit Vault给安全人员提供了检测和报告那些可能表明尝试获取未经授权的访问,或者系统特权的滥用的活动。Oracle Audit Vault能够产生用户定义和系统定义的事件的相关告警。Oracle Audit Vault持续监控收集到得审计数据,评估活动是否不符合预定义的条件。告警可以和任何可审计的数据库事件关联,包括系统时间例如修改应用表格和创建特权用户。例如,当有人试图访问商业敏感数据时可以产生告警。
 
Oracle Audit Vault接口提供了导致告警的活动的一个图形化的概括,包括告警活动的摘要、TOP告警源。Oracle Audit Vault用户能够点击摘要图打开更详细的报告。告警按照和塔门关联的事件源进行了分类。告警也可以按照事件归属进行分类,或者按照严重级别进行分类(分为警告, 严重, 信息).。
 
审计策略
 
Oracle Audit Vault提供了Oracle数据库审计设置的集中管理,这样简化了IT安全和内部审计人员的工作。许多企业被要求按照特定的审计事件或者审计策略来动态监控系统。在大部分环境里,这些审计设置的定义和管理是手工过程。IT安全人员必须和内部审计人员一起定义数据库的审计设置。另外,内部审计人员需要周期的和IT安全专员一起来确认这些审计设置没有被更改。在一个给定的数据库上使用的审计设置的集合通常叫做“审计策略”。
 
Oracle Audit Vault提供了从Oracle Audit Vault控制台集中定义策略的能力。这样同时为IT安全人员和内部审计人员提供了更加容易的方法来管理整个企业的审计设置,以及向外部审计人员展示合规性和重复控制。
 
    
安全性和可扩展性
 
审计数据是商业活动的重要记录。审计数据必须被保护以防止修改,这样才能保证给予升级数据的报告和调查的完整性。Oracle Audit Vault将数据存储在一个安全的基于Oracle业界领先的数据库安全技术构建的数据库中。及时的将审计数据从源数据库传输到审计数据库中,这样就关闭了那些试图修改审计数据来掩盖他们行踪的入侵者的大门。
 
Oracle Audit Vault能够配置成几乎是实时的传输审计数据。Oracle Audit Vault保护数据在传输过程中以及在Oracle Audit Vault内的安全。在审计数据传输过程中,数据是加密的,防止任何人在传输过程中窃取或者篡改数据;在Oracle Audit Vault内部,对审计数据的方位基于“职责分离”原则进行严格控制。Oracle 分区使得审计数据能够基于商业需要而分布在不同物理位置上。Oracle RAC可以可选的对Oracle Audit Vault授权,提供更多的可扩展性和更高的可靠性。
 
总结
 
审计数据在帮助组织机构维护高安全性和加强满足内部和外部法规和规章制度上扮演了越来越重要的角色。对大量的安全事故的调查表明:监控活动和对敏感数据的访问能够大大的减少很多安全事故的财务影响。Oracle Audit Vault有助于组织机构通过自动的将审计数据合并到一个安全和可靠的数据仓库中来增强安全性。
 
大量的报告——“开箱即用”的按照功能进行分类的——为安全人员和规范审查人员提供了对来源于Oracle and Microsoft SQL Server数据库的审计数据的简单的访问,而内置的告警提供了快速发现和调查潜在问题的能力。集中策略简化了整个企业的审计设置的管理,以及合规证据的提供。Oracle Audit Vault提供了关于使用Oracle BI Publisher或者其它第三方的报告工具来创建自定义报告的详细的文档。将来的Oracle Audit Vault版本将会支持更多的数据库和数据源。
 
本篇文章来源于 Linux公社网站()  原文链接:
阅读(4818) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

zzjlzx2011-12-31 09:57:58

Oracle 10g R2提供了一个新的特性,让你只需要做如下动作:你可以不写一行代码,只需要声明你需要加密某列。当用户插入数据的时候,数据库透明的加密数据然后存储加密后的数据。同样的,当用户读取数据时,数据库自动进行节目。由于加解密操作对应用程序来说都是透明的,不需要应用程序修改代码,因此这个特性就叫做:透明数据加密(TDE)。

布毫铯2011-12-29 09:32:51

不写一行代码,透明的加密敏感数据!??z什么意思?