What to Expect When Sharing a TDE Wallet Between 2 or More Databases?_Hadoop,ERP及大数据讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Hadoop,ERP及大数据讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4379 | 回复: 0   主题: What to Expect When Sharing a TDE Wallet Between 2 or More Databases?        下一篇 
liru
注册用户
等级:下士
经验:192
发帖:35
精华:0
注册:2012-3-16
状态:离线
发送短消息息给liru 加好友    发送短消息息给liru 发消息
发表于: IP:您无权察看 2012-3-16 9:24:20 | [全部帖] [楼主帖] 楼主

目标

这个注解是为了回答下面的问题:

1. 当在2个或者更多的数据库中共享一个TDEwallet的时候,应该期待着什么?

2.  推荐什么,独立wallet还是共享?

解决方案

1. 当在2个或者更多的数据库中共享一个TDE钱包的时候,应该期待着什么?

1.2使用加密专栏

数据库将共享智能密钥

TDE 机制以这样的方式工作: 当产生一个新的智能密钥时,在数据库中已有的目标密钥用新的智能密钥加密。 新的目标将会用当前的智能密钥加密。

#2 因此,如果数据库的智能密钥是重新设置的,数据库#1中的所有目标,不管是新的还是旧的,都会使用最近的智能密钥。然而, 在数据库#2中,旧的目标仍会使用旧的智能密钥,也就是在数据可#1重设置密钥之前的使用的密钥。然而,新产生的目标将会使用新的智能密钥。
#3因此,如果智能密钥仅在第一个数据库中被重设多次,一个用户可能会以在数据库#1中的所有目标应用相同的,最新的,智能的密钥结束。然而在数据库#2中,目标可能会用在共享开始之后所产生的所有的智能密钥。
#4 如果想用最新的密钥重设第二个数据库中的所有目标,就得对数据库中用前面的智能密钥加密的目标进行解密。


为了证明上面的,一个应用数据库2的例子, TEST1 和TEST2 被创建。

1. enc$ 字典表, 保持智能密钥和目标的一致性

2. mkstore命令,它允许检查wallet的内容,使用: mkstore -wrl <wallet location> -list

证明上面陈述的步骤

#1. 首先创建数据库2, 从相同的Oracle主目录产生TEST1 和 TEST2。
#2. 这时,产生一个普通的钱包地址,ie,设置在sqlnet.ora:
#3. 在TEST1的数据库中产生wallet


SQL> 变换系统,由”welcome1” 设置密钥认证

#4. 在TEST1 和 TEST2中检查v$ 加密钱包,这个钱包在二者中时可见,可获得的。

在TEST2 中打开wallet

SQL >变换系统,由”welcome1”设置钱包的打开认证

正如所看到的,打开共享的钱包是没有问题的。 v$ 加密钱包在TEST1中显示了相同的值

#5 可以运行wallet目录核对wallet的内容
#6. 在两个数据库中创建加密的目标


下面的在TEST1和TEST2中运行:

SQL> 由测试创建测试用户认证

SQL > 为测试安排dba

sQL> conn test/test


SQL> 创建测试表

SQL>插入测试值

SQL > 提交

#7. 核对 enc$

测试1

SQL > 设置页码范围 1500

SQL> 从enc$选择obj#, mkeyid

    测试2:

SQL> 从enc$选择obj#, mkeyid

到此,数据库2使用相同的智能key, 因为这些是创建的首批目标。因此,所有的,都没有问题。:

#8. 对wallet备份,并且在TEST1中重设密钥

SQL> 变换系统,由”welcome1” 设置密钥认证

#9. 在TEST1中核对enc$ 的效应

SQL> 从enc$选择obj#, mkeyid

      

正如所看到的,智能key已经变了。

在wallet 内部同样,也能看到。

#10. 在TEST2中重新打开wallet

SQL> 变换系统,由”welcome1” 设置密钥认证

SQL> 从enc$选择obj#, mkeyid

    这个目标的智能密钥没有被重新设置,即使在第一个db中它已完成。 前面加密的目标仍然使用前面的智能key. 这是注意到的一个差异点。并且它不易被发现。

#11 重新存储第一个wallet, 因为前面的智能key被重设,证明上面的:

测试1:

SQL> 变换系统,由”welcome1” 重设wallet打开认证

SQL> select * from test;


测试2:

SQL> 变换系统,由”welcome1” 重设wallet打开认证

SQL> conn test/test
#12. 重新存储最近的wallet
#13. 当在TEST2上创建一个新的加密表时,将会使用新的智能密钥:
SQL> conn test/test


SQL> 在test1中创建表

2  (id number encrypt);


SQL >对测试1插入值

SQL> 提交

SQL> conn / as sysdba


SQL > 从enc$中选择obj#, mkeyid

新的目标应用新的智能key.

现在,在TEST2 中应用了两个智能密钥

#14. 在TEST2数据库中重新设置智能密钥,正如所期待的,对两个目标,智能密钥被重新设置。

SQL> 变换系统, 由”welcome1”设置密钥认证

SQL > 从enc$ 中选择 obj#, mkeyid

#15. 在enc$中,每一个加密目标有一个入口。

当创建智能key时,正如所期待的,所有的入口都被重设。然而,在这种情况下,当在2个数据库中共享wallet和智能key时, 重设智能key使在其他数据库的就目标应用旧的key.其他的数据库至少使用2个智能key. 因此,为了能够在两个数据库中使用相同的智能密钥,一个数据库重设智能key时,另一个数据库中存在的目标必须被重新编码。

alter table <table_name> rekey.


在TEST1中创建新的加密表。

SQSQL> conn test/test


SQL>  在test1中创建表

    2  (id number encrypt);

SQL> 在test1 中插入值

SQL>提交

SQL> 从enc$中选择 obj#, mkeyid

        

73404 旧表使用以前的智能key

73409 新表使用新的智能key

重新设置key

SQL> 修改测试表key

SQL> 从enc$中选择obj#, mkeyid

73404 现在旧表使用新的key

73409  正如所期待的,wallet 的内容包含所有的3个智能key.

l        每次wallet 备份或者是恢复它推荐的一下步骤:

变换系统,由“welcome1”设置 wallet的关闭认证

恢复或者备份

变换形同,由“welcome1”设置wallet的打开认证

1.2 USING TABLESPACE ENCRYPTION

在11gR1中,数据库可以无误的共享wallet.在2个数据库中测试,的确可以证实2个数据库共享wallet.

SQL> 从vs$加密 wallet中选择wrl参数,状态

在创建空间表的过程中没有产生错误。2个数据库共享表空间加密key.在这个设置中没有明显的错误。同样地, 应该提到空间加密表在释放的过程中不能被重新设置。

在11gR2中,数据库之间可以无误的共享wallet. 事实上,
1. 空间加密key只产生一次,但是不管有多少数据库插入这个wallet, 它将一直被使用。这个加密key 不管是在11.1中还是在11.2中,都不能改变。
2. 释放1和2的仅有的不同是在11.2中, 使用同一标准的key去加密列和空间表加密key.

2. 推荐怎么做,把wallet独立和共享它们

     在技术上共享wallet是没有问题的。 正如所看到的一样,在这样做的时候没有错误,或者是功能丢失。

然而,管理这样的一个系统可能会有点微妙,特别是当需要频繁的智能加密key时,必须在两个数据库上同时重设key, 来确保数据库要求标准的依从性。 正如所看到的,只在一个数据库上重设key,会使另一个数据库对于旧的目标仍然使用旧的key。

这样,只要这种情况被彻底的理解并且这样的接受,数据库之间就可以共享wallet, 只要数据库是单一实例,并且数量不大。

然而,共享wallet不是一个好主意。

RAC实例,必须在一个节点上重设key. 就像在文件中看到的一样,当wallet 不共享时,必须将wallet复制到其他节点上。

结点有大量的数据库时使用TDE. 对于所有的数据库,wallet 可能会变成一个单一失败点。

在这种情景下,最好使用独立的wallet. 不管是在$ORACLE_BASE/admin/<SID>/wallet下使用默认的地址,还是使用独立的sqlnet.ora files/instance管理wallet的地址。

注意 1240824.1, 设置Sqlnet时对数据库安全的细节性影响。

3.怎么把共享的wallet移植到独立的wallet?

#1. 关闭wallet。 将wallet备份以防出现错误并可以避免任何用户错误。

变换系统,设置wallet 为关闭状态。

#2. 如果这个wallet不使用默认的地址,确保在sqlnet.ora文件中它的独特性。

检查:

文件 1240824.1. 设置Sqlnet 对数据库安全性的影响。

#3. 创建一个新的wallet地址,并将这个wallet复制到期望的独立地址中。
#4. 如果需要的话,正如上面的注释所表明的,重启事务或者监听口。由v$wallet_location.查询来确保新的wallet 的地址已经使用。


变换系统,由“wallet password”设置打开认证,来打开wallet.

#5. 如果需要的话,确保存在的部分重启。只有当一个部分重启时,它才需要sqlnet.ora
#6. 实施操作,它可以使用新的wallet地址。
#7. 对于所有的数据库重复相同的步骤。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论