版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、甲骨文数据安全解决方案TDE透明数据加密这可能是你公司最糟糕的噩梦:有人偷了数据库的备份磁带!当然,您可能已经构建了一个安全系统,加密了最敏感的资产,然后在数据库服务器周围构建了防火墙来保护它们。然而,小偷采取了最简单的方法:他偷了备份磁带,在另一台服务器上恢复了数据库,启动了数据库,然后他可以一边喝咖啡一边悠闲地浏览数据。保护数据免遭此类盗窃不仅是一种良好的做法,也是许多法律、法规和政策的要求。您如何保护您的数据库以防止此类漏洞?一种解决方案是加密数据库中的敏感数据,然后将加密密钥存储在不同的地方,因此即使数据被盗,也是无用的。但是,您必须平衡两个相互冲突的概念:应用程序可以轻松访问加密密钥
2、,以及防止密钥被盗的安全性。为了能够遵守公司和政府法规,您需要一个无需复杂编码的快速解决方案。Oracle 10g R2提供了一个新特性,它只允许您执行以下操作:您不能编写一行代码,您只需要声明您需要加密一列。当用户插入数据时,数据库透明地加密数据,然后存储加密的数据。同样,当用户读取数据时,数据库会自动解密。由于加密和解密操作对应用程序是透明的,并且不需要应用程序修改代码,因此该功能称为透明数据加密(TDE)。tde是如何工作的?我在2005年1月/2月的甲骨文杂志上提到了甲骨文10g数据库加密的基本原理。现在让我们概述一下要点:加密时,您需要应用加密算法和加密密钥来加密和解密明文输入数据;
3、为了成功解密,您必须知道加密算法和密钥。在那篇文章中,我描述了如何使用Oracle提供的加密工具来构建加密框架。但是,有了Oracle 10g R2数据库和TDE,您就不需要自己构建这样的框架了。您所要做的就是定义需要加密的列。Oracle 10g数据库将为包含加密列的表创建私有(用户不需要知道)安全加密密钥,然后使用您指定的加密算法加密指定列的明文数据。在这种机制下,保护表的加密密钥(以下称为“表密钥”)是非常重要的。Oracle 10g使用主密钥对表密钥进行加密。主密钥存储在一个名为“钱包”的安全地方,它可以是数据库服务器上的一个文件,加密的表密钥存储在数据字典中。当用户将数据插入要加密的
4、列中时,Oracle 10g从钱包中获取主密钥,用主密钥解密数据字典中的表密钥,用解密的表密钥加密输入数据,然后将加密的数据保存在数据库中。如下图1所示:图1: TDE工作原理您可以加密表格的部分或全部列。例如,一个表有4列。如上图1所示,第2列和第3列是加密的,但是Oracle只生成一个表级加密密钥,然后用这个密钥加密所有加密的列。在磁盘上,第1列和第4列以明文形式存储,第2列和第3列以加密形式存储。由于数据是加密存储的,所有后续组件(如备份和归档日志)都是加密格式。当用户查询加密列时,Oracle 10g透明地从数据字典中取出加密的表密钥,取出主密钥,解密表密钥,用解密的表密钥解密磁盘上的
5、加密数据,最后将明文返回给用户。通过这种加密数据的方式,即使存储在磁盘上的数据被盗,没有主密钥也不能获得数据,因为主密钥没有被盗。即使“钱包”被盗,如果没有钱包密码(TDE涉及3个密码,一个是钱包密码,用于启动钱包;一个是主密钥,用于加密和解密表密钥。一个是表密钥,用于加密和解密数据。钱包密码由用户手动输入。主密钥和表密钥由系统管理)。主密钥仍然不可用。因此,即使窃贼窃取了磁盘或数据文件的副本,他也无法解密数据。这符合许多规则和准则的要求,所有这些都不需要修改应用程序或编写复杂的加密和密钥管理系统。接下来,我将向您展示如何打开和使用TDE。1.1一次性安装首次使用TDE时,您必须1)指定“钱包
6、”的位置,2)设置钱包密码,以及3)打开钱包。指定钱包位置首次启用TDE时,必须创建一个钱包。默认情况下,钱包是在$ Oracle _ base/admin/$ Oracle _ sid/钱包目录中创建的。因此,如果$ORACLE_BASE为/u01/app/oracle,而$ORACLE_SID为SWBT4,则钱包将存储在/u01/app/ORACLE/admin/SW bt4/钱包目录中。您还可以通过位于$ORACLE_HOME/network/admin目录中的sqlnet.ora文件中指定的方式选择不同的目录。例如,如果您想将钱包放在/orawall目录中,请在sqlnet.ora文件
7、中写入以下内容:加密_钱包_位置=(来源=(方法=文件)(方法_数据=(DIRECTORY=/orawall)在下面的例子中,我们假设钱包在默认位置。您还应该在常规备份中包含钱包。创建钱包现在,您必须创建一个钱包并设置访问密码。为了能够完成此操作,用户通过以下操作获得权限:更改系统设置加密密钥由“残余”认证;该命令执行以下功能:在步骤1中指定的目录下创建一个钱包将钱包密码设置为“剩余”为TDE储物和万能钥匙购买打开钱包钱包密码区分大小写,必须用双引号括起来。密码“残余”不会在任何动态性能视图或日志中显示为明文。打开你的钱包由于钱包只需要创建一次,上述两个步骤只需要执行一次。必须在数据库启动后显
8、式打开钱包。创建钱包时,钱包也会打开。创建钱包并设置密码后,每次打开数据库时,必须使用密码打开钱包,如下所示:alter system set encryption wallet open authenticated by resident ;您可以通过以下方式关闭钱包:更改系统设置加密钱包关闭;为了让TDE正常工作,钱包必须打开。如果钱包已关闭,您仍然可以访问未加密的列,但不能访问加密的列。1.2加密列要使用TDE加密列,只需在定义列时添加一个简单的谓词“ENCRYPT”。在定义之前,您自然需要决定使用什么加密算法和密钥长度。有关详细讨论,请参考我前面提到的文章“加密您的数据资产”。在常规模
9、式中,假设您有一个名为“account”的表,定义如下:ACC _ non numberACC_NAMEVARCHAR2(30)SSNVARCHAR2(9)目前,表中的所有数据都是明文。你想把SSN专栏转换成加密的,所以SSN保存了一个敏感的“社会安全号码”。您可以通过以下方式设置它:修改表帐户(ssn加密);该语句完成了以下两件事:为表创建一个表键。如果修改同一表中的另一列进行加密,将使用相同的表密钥。将所有列的值转换为加密形式此语句不修改数据类型或列长度,也不创建触发器或视图。默认采用192位密钥长度的AES算法。您也可以选择不同的算法,只需在SQL命令中指定它们。例如,如果您想使用128
10、位AES算法,您可以使用以下语句:修改表帐户(使用AES128加密ssn您可以使用AES128、AES192、AES256或3DES168。这些值是不言自明的,例如,AES256是指使用AES算法的256位长度的密钥。加密列后,您可以在查看表格时看到以下信息:SQL desc帐户名称空?类型-ACC _ non numberACC_NAMEVARCHAR2(30)SSNVARCHAR2(9) ENCRYPT注意ENCRYPT关键字跟在数据类型后面。如果需要在数据库中查找加密列,可以在数据字典视图中搜索DBA _ encrypted _ columns(不能在SYS中的所有表中启用TDE)。2性
11、能考虑因为加密和解密会消耗CPU,所以您必须考虑性能的影响。当您访问表中未加密的列时,性能与不使用TDE的表没有区别。只有在访问加密列时才会有小的性能负担,包括查询加密列和插入加密列,因此您可能希望选择加密列。如果不再需要加密列,可以通过以下方式关闭加密功能:更改表帐户修改(ssn解密);还必须考虑索引的使用。在上面的例子中,让我们假设在ssn列上有一个名为in_accounts_ssn的索引。如果对ACCOUNT表的查询具有相等的谓词,如下所示:从帐户中选择*其中ssn=。这样,将使用in_accounts_ssn。如果使用LIKE谓词,则如下所示:从帐户中选择*其中ssn占123%;索引不
12、会被使用,但会被整个表扫描。原因很简单。索引的B树结构确保具有相同前缀的值(例如,“分段的”、“分段的”等等)在物理上是相邻的。当处理LIKE谓词时,Oracle 10g通过模式匹配来搜索索引条目。物理邻接有助于加快索引搜索,这也比全表扫描好。但是,如果列是加密的,则索引上的实际值完全不同(因为它们是加密的),因此原始的相邻数据分散在整个索引中。这导致索引扫描笔在整个表格扫描中消耗更多性能。因此,对于LIKE谓词,Oracle 10g将忽略索引,直接采用整个表扫描。在相同匹配的谓词的情况下,搜索指定的索引将替换按值匹配的模式,因此使用索引比扫描整个表执行得更快,并且数据库优化器选择使用索引。当
13、您决定加密列时,请考虑加密如何影响索引,并特别注意您可能想要重写涉及加密列的特定查询。3密钥和密码管理万一有人得到了表密钥或者你怀疑有人破解了加密的表密钥,你该怎么办?您可以简单地为表创建一个新的密钥,换句话说,重新生成密钥,然后使用下面的语句用新密码重新加密所有加密的列。您可能想要选择另一种加密算法,如AES256。您可以通过以下方式同时完成两件事:使用aes256更改表帐户密钥;如果有人得到了钱包的密码怎么办?您可以通过甲骨文钱包管理器修改钱包密码,并在命令行中输入OWM以调用以下图形用户界面工具。从顶部菜单中选择钱包-打开,选择您指定的钱包位置,然后输入钱包密码,并选择钱包-更改密码来更
14、改钱包密码。应该注意的是,更改钱包的密码不会更改主密钥。图2: oraclewallet管理器如何处理“盐”加密是关于如何隐藏数据,但如果原始明文数据有大量重复数据,有时很容易猜测加密数据的原始值。例如,薪资信息表将包含许多重复值。在这种情况下,加密值将是相同的。入侵者可以确定相同薪资的所有索引条目。为了防止这种情况,将“盐”添加到数据中,以便即使具有相同原始值的数据在加密后具有不同的加密值。TDE默认使用“盐”技术。如果要在加密列上创建索引,不能包含“salt”。“盐”可以通过以下方法从SSN柱中除去:修改表帐户(ssn不加密盐);如果要在包含“salt”的加密列上创建索引,将会出现错误提示,如下例所示:在_acc_01中创建索引关于账户(SSN);ORA-28338:无法用盐加密索引列当你要加密一个包含“盐”的列时,你会得到同样的错误。同样,如果列具有隐式索引,例如,如果该列是主键的一部分,或者如果该列被定义为唯一的,则不能使用加密。由此推断,当列是外键的一部分时,也不能使用盐。5导出TDE加密数据默认情况下,如果使用EXPDP工具导出包含加密列的表,则即使列被定义为加密列,导出文件中的列也是空白的。以下命令将导出ACCOUNTS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消防设施、器材维护管理制度
- 总包单位质量责任制度
- 我省信访工作责任制度
- 打磨工岗位责任制度
- 扫黄扫非工作责任制度
- 技师岗位责任制度
- 抚宁区经济责任制度
- 报人员责任制度
- 挂车司机岗位责任制度
- 控烟领导小组责任制度
- 2026年及未来5年市场数据中国通讯铁塔行业市场全景分析及投资战略规划报告
- 2026年全国计算机一级考试试题及答案
- 海鲜养殖技术培训课件
- 2025年UOM无人机理论培训合格证题库及答案
- 检验科危化品培训课件
- 弹簧机技术分享
- 2025NCCN临床实践指南:骨癌(2025.v2)解读课件
- 2026年枣庄科技职业学院单招综合素质考试模拟试题带答案解析
- 四川省全域土地综合整治试点实施方案编制指南(试行)
- 人工智能在古诗词创作中的应用研究课题报告教学研究课题报告
- 2025年江西科技学院单招(计算机)测试模拟题库附答案
评论
0/150
提交评论