oracle 10g R2 新特性 TDE

在Oracle的最新版本10g R2中,出现最及时的技术应该是透明数据加密技术(Transparent Data Encryption,TDE)。这一技术包含在Oracle高级安全选项里,每处理器的费用为10,000美元,只供企业版用户使用。

与之前Oracle发布的隐蔽工具包相比,TDE是一个巨大的飞跃。虽然工具包是免费的,但远远不能满足用户的需求。不但需要手工改写代码,还要修改程序代码来调用加密的API。

透明数据加密

对于加密,许多用户深感矛盾:他们既感兴趣,又因意识密钥管理的复杂性而感到慎重,如果处理不当,则会导致设置的效率低下。加密和解密值还会带来相关的性能开销,这使得大部分应用程序架构师不太乐于接受该过程。结果是,很多系统设计根本没有加密,只是构筑了强大的外围防护,如强大的口令和适当的授权方案。

但是,请想象一下如果整个服务器被盗了,甚至只是磁盘被盗,这些磁盘可以装配在具有相同操作系统的服务器上,然后其中的数据将被销毁殆尽。或者有一个的 DBA 品行不端,在日常业务活动中恶意突破了外围防护,然后将您所有重要的客户信息洗劫一空。在这两种情况下,如果所涉及的商业机构是在加利福尼亚州(可能不久之后在美国的其他州),它们在法律上有责任将安全漏洞的情况通知给所有受到影响的客户。

 

在上述罕见(但确是事实)的情况中,认证方案没有实际意义。这就是为什么对于那些将安全作为头等大事的机构而言,透明数据加密 (TDE) 是一个如此有用的特性;它支持加密,同时将密钥管理的复杂性交给数据库引擎来处理。同时,它允许 DBA 在不必实际看到数据的情况下管理数据库表。

 

在 Oracle 数据库 10g 第 2 版中使用 TDE 时,可以随时地对表中的一列或多列进行加密;只需将列定义为加密形式即可,不用编写代码。请记住,加密需要使用密钥和算法对输入值进行加密。TDE 为特定的表生成单独的密钥。这种方法方便了密钥管理却也更易被他们窃取,所以数据库提供了另一种密钥 — 万能密钥 — ,它可以在数据库级别上设置。表密钥是利用万能密钥进行加密的,要获得表密钥就需要这个万能密钥。因此,对列进行解密时需要万能密钥和表密钥。(有关常规加密以及在 Oracle 中使用供应程序包的进一步探讨,请参见 Oracle 杂志专栏“为您的数据资产加密”。)

 

万能密钥存储在数据库外一个称为“钱夹”的地方 — 默认位置在 $ORACLE_BASE/admin/$ORACLE_SID/wallet。在概念上,它类似于下图。

 

 

在配置 TDE 之后 — 或者更明确地说是配置了钱夹和万能密钥之后 — 您可以使用它来保护数据值。要为表的一列加密,需要使用以下 SQL:
create table accounts
(
acc_no       number       not null,
first_name   varchar2(30) not null,
last_name    varchar2(30) not null,
SSN          varchar2(9)             ENCRYPT USING 'AES128',
acc_type     varchar2(1)  not null,
folio_id     number                  ENCRYPT USING 'AES128',
sub_acc_type varchar2(30),
acc_open_dt  date         not null,
acc_mod_dt   date,
acc_mgr_id   number
)
在这里,您在列 SSN 和 FOLIO_ID 上使用了 TDE,它们现在以加密方式存储在表本身。但是,当用户从表中选择时,她看到以明文表示的数据,因为在检索过程中已经完成了解密。如果磁盘被盗,则包含在表段中的信息仍然保持加密状态。盗窃者需要表密钥才能看到加密的值,但是要获得表密钥,他需要万能密钥,而万能密钥存储在外部,因此无法获得。

 

注意列 SSN 和 FOLIO_ID 后面的子句,这些子句指定 ENCRYPT 使用 128 位高级加密标准。

 

数据库拥有预先配置的钱夹。要设置钱夹口令,可使用命令:
alter system set encryption key authenticated BY "topSecret";
如果还未创建钱夹,该命令将先创建钱夹,然后将口令设置为“topSecret”(区分大小写)。然后您就可以开始在表的创建和更改期间将加密用于列定义。

 

为外部表加密

 

在以上示例中,我使用散列表为列加密。您还可以在外部表上使用 TDE。例如,如果您希望生成一个包含 ACCOUNTS 的数据的转储文件,以便发送到不同的地点,则可以使用简单的 ENCRYPT 子句。
create table account_ext
organization external
(
type oracle_datapump
default directory dump_dir
location ('accounts_1_ext.dmp',
'accounts_2_ext.dmp',
'accounts_3_ext.dmp',
'accounts_4_ext.dmp')
)
parallel 4
as
select 
ACC_NO,
FIRST_NAME,
LAST_NAME,
SSN           ENCRYPT IDENTIFIED BY "topSecret",
ACC_TYPE,
FOLIO_ID      ENCRYPT IDENTIFIED BY "topSecret",
SUB_ACC_TYPE,
ACC_OPEN_DT,
ACC_MOD_DT
from accounts;
在文件 accounts_*_ext.dmp 中,SSN 和 FOLIO_ID 的值不会是明文,而是加密形式。如果您希望使用这些文件作为外部表,则必须提供 topSecret 作为口令以读取这些文件。

在这里您可以看到,TDE 是访问控制的理想补充(而不是替代)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
启用Oracle透明数据加密TDE)需要执行以下步骤: 1. 创建Oracle Wallet:使用Oracle Wallet Manager或mkstore命令行工具创建Oracle Wallet。创建Oracle Wallet时需要设置口令,并且需要将Oracle Wallet的位置记录在tnsnames.ora文件中。 2. 生成主密钥:使用Oracle Wallet Manager或mkstore命令行工具生成主密钥,也称为TDE口令。主密钥需要保存在Oracle Wallet中。 3. 启用TDE:可以启用整个数据库、表空间或单个列的TDE。使用ALTER DATABASE或ALTER TABLESPACE语句启用整个数据库或表空间的TDE,使用ALTER TABLE语句启用单个列的TDE。 4. 加密数据:使用ALTER TABLE语句对需要加密的列进行加密。 以下是具体步骤: 1. 创建Oracle Wallet: 使用Oracle Wallet Manager创建Oracle Wallet: - 运行Oracle Wallet Manager。 - 在菜单中选择“New”。 - 输入口令并确认。 - 选择“File” > “Save As”保存Oracle Wallet。 使用mkstore命令行工具创建Oracle Wallet: - 打开命令行窗口。 - 输入命令:`mkstore -wrl <wallet_location> -create`。 - 输入口令并确认。 - 选择“File” > “Save As”保存Oracle Wallet。 2. 生成主密钥: 使用Oracle Wallet Manager生成主密钥: - 运行Oracle Wallet Manager。 - 在菜单中选择“Operations” > “Create Key”。 - 输入TDE口令并确认。 使用mkstore命令行工具生成主密钥: - 打开命令行窗口。 - 输入命令:`mkstore -wrl <wallet_location> -createCredential <alias> <username> <password>`。 - 输入TDE口令并确认。 3. 启用TDE: 启用整个数据库TDE: - 运行SQL*Plus或SQL Developer。 - 使用SYS用户登录到数据库。 - 执行命令:`ALTER DATABASE ENCRYPTED USING 'AES256' KEYSTORE <wallet_location> IDENTIFIED BY <tde_password>`。 启用表空间的TDE: - 运行SQL*Plus或SQL Developer。 - 使用SYS用户登录到数据库。 - 执行命令:`ALTER TABLESPACE <tablespace_name> ENCRYPT`。 启用单个列的TDE: - 运行SQL*Plus或SQL Developer。 - 使用SYS用户登录到数据库。 - 执行命令:`ALTER TABLE <table_name> MODIFY <column_name> ENCRYPT`。 4. 加密数据: 使用ALTER TABLE语句对需要加密的列进行加密: - 运行SQL*Plus或SQL Developer。 - 使用SYS用户登录到数据库。 - 执行命令:`ALTER TABLE <table_name> MODIFY <column_name> ENCRYPT`。 以上是启用Oracle透明数据加密TDE)的基本步骤,需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值