Oracle 11G Transparent Data Encryption(TDE)用于透明数据加密表空间

作者简介:吴建,现就职于北京海天起点技术股份有限公司,具有多年的公安、政府、金融行业oracle数据库维护经验,致力于帮助客户解决生产环境出现的各种问题。

Oracle Transparent Data Encryption透明数据加密概念与概述

Oracle Transparent Data Encryption介绍

Oracle Transparent Data EncryptionTDE)可以在对应用程序完全透明的存储介质上对敏感应用程序数据进行加密。TDE 自动对 Oracle 数据库写入到存储的数据进行加密,并在请求用户通过了 Oracle 数据库的身份验证,并通过了访问控制检查后再自动解密这些数据。数据库备份的数据仍然是加密数据,这就为备份介质提供了保护。对于逻辑备用数据库和物理备用数据库均可以配置 TDE,从而为高可用性体系结构中的敏感数据提供全面保护。在Oracle数据库10g发行版2中引入了TDE列加密,允许对包含敏感信息的表列进行加密。在Oracle数据库11gR1中引入了TDE表空间加密和对硬件安全模块(HSM)的支持。

TDE是保护数据在数据移动过程中。它是对数据文件中的数据进行加密,以便万一数据是由非正常途径获取的,就不可能访问明文数据。TDE不能用于控制用户访问数据的权限,在配置TDE的数据库中,任何对加密表具有访问权限的用户都能够以明文形式看到数据,因为Oracle将为具有权限的任何用户透明地解密数据。


Oracle Transparent Data Encryption密钥管理

透明密钥管理对成功部署加密是至关重要的。TDE 会自动在后台创建加密密钥。TDE 使用双层密钥体系结构,在这种体系结构中,每个密钥都通过另一个称作 TDE 主密钥的密钥进行保护。主密钥存储在数据库之外(Oracle Wallet 中)的 PKCS#12 格式文件中,该文件在设置时使用由指定的安全管理员或数据库管理员提供的口令短语进行加密。在恢复操作期间使用存储在 Oracle Wallet 中的主加密密钥自动解密 Oracle RMAN 加密备份。Oracle 建议将 Oracle Advanced Security TDE Wallet 备份在单独的介质上,并将这些钱夹存储在单独的位置。随Oracle Database 11g 一起提供的 Oracle Advanced Security 支持将主密钥存储在硬件安全模块 (HSM) 设备(包括由 RSAThales/nCipher Safenet 提供的设备)中,以便获得更高的安全保证。

TDE 使用双层密钥体系结构:

一个主秘钥——这是用于用于列加密和表空间加密的辅助密钥。

一个或多个表秘钥和/或表空间密钥——这些是用于加密一个或多个特定列的密钥或用于加密表空间的密钥。不管表中加密的列的数量如何,只有一个表秘钥,并将其存储在数据字典中。表空间密钥存储在加密表空间的每个数据文件头中。

保护表的加密密钥(以下称”表密钥”)就显得非常重要了。Oracle 10g通过一个master密钥来对表密钥进行加密。master密钥保存在一个叫做”钱夹(wallet)”的安全的地方,钱夹可以是数据库服务器上的一个文件,加密的表密钥保存在数据字典中。

当用户插入数据到需要加密的列中的时候,Oracle 10g从钱夹中获取master密钥,用master密钥解密数据字典中的表密钥,然后用解密后的表密钥加密输入数据,再将加密后的数据保存在数据库中。同样道理:当查询一个加密列时,Oracle 将加密的表密钥从数据字典中取出,再取出master密钥,然后解密表密钥,再用解密后的表密钥来解密磁盘上加密的数据,最后返回明文给用户。

通过这种加密数据的方式,即使保存在磁盘上的数据被盗,由于master密钥并没有被盗,没有master密钥的情况下,数据无法被获取

即使”钱夹(wallet)”被盗,如果没有钱夹密码(注:TDE涉及3个密码,一个是钱夹密码,用来启动钱夹;一个是master密钥,用来加解密表密钥;一个是表密钥,用来加解密数据,钱夹密码是用户手工输入的,master密钥和表密钥是系统管理的),master密钥还是无法获取。

无论是单个列或多个列加密,Oracle只会生成一个表级的加密密钥,然后用这个密钥加密所有的加密列,由于数据是加密存储的,所有后续的组建(如备份和归档日志,都是加密的格式)
都是自动加密。

11g 表空间级透明数据加密的功能提升

相对于10g版本的列级TDE,表空间级TDE提供了更多的灵活性和更好的性能。

下列表格是10g列级TDE11g 表空间级TDE的比较。

列级TDE 表空间级TDE
加密完成在 PGA Data Block
SGA中加密数据的状态 加密的 解密的
支持的索引类型 只支持b-tree索引 支持所有类型索引
支持外键? 不知道外键加密(因为不同的表
用不同的key
支持外键
支持的索引search方式 支持等值search,不支持范围扫
支持所有类型的search
支持的数据类型 部分 所有
执行计划是否改变 可能 不改变
是否需要增加存储的占用

Oracle 11G Transparent Data Encryption表空间透明加密配置

确保钱夹位置存在

如果必须使用非默认钱夹位置,则在sqlnet.ora文件中指定它:

这里我们将钱夹的位置放在:/home/oracle/wallets/ogg2

注意:默认的加密钱夹位置是$ORACLE_BASE/admin/<global_db_name>/wallet。如果希望让Oracle在默认位置管理钱夹,则无需在sqlnet.ora中设置ENCRYPT._WALLET_LOCATION参数,只需在$ORACLE_BASE/admin/<global_db_name>/wallet建立相应目录。

创建钱夹目录 $mkdir –pv /home/oracle/wallets/ogg2

创建一个主秘钥

此命令将执行以下操作:如果钱夹位置当前没有钱夹,那么将生成一个带有密码”tdepassword“的新钱夹。密码以双引号括起来,以保存字符的情况。如果不使用双引号,则密码的字符都是大写字母。这个命令也会导致新的钱夹被打开并准备好使用。

当实例重启后或者wallet被关闭后,必须重新open wallets,这样才能保护被加密的列.而在Open wallet之前,数据库必须处于mount 状态。

在操作系统上查看新钱夹

数据库上要查看钱夹的状态,请运行以下查询:

创建一个加密表空间

使用另一种加密算法创建另一个加密表空间

TDE支持的加密算法有:3DES168AES128AES192AES256AES128是没有指定的默认加密算法。

检查表空间是否加密

查看表空间使用的加密算法

在加密表空间中创建一张表

移动表进出加密表空间

移动表到非加密表空间

关闭钱夹

由于表现在处于非加密表空间中,因此表数据被解密。因此可以读写,即使钱夹被关闭。

尝试将表移回到加密表空间

需要打开钱包来重新加密表的数据,以便存储在加密表空间中。

重新打开钱夹,移动表至加密表空间

SYSTEM, SYSAUX, UNDO, TEMP表空间不能使用加密表空间

使用export/import导入导出加密表空间中的表

加密表空间不支持exp/imp

加密表空间支持expdp/impdp

expdp导出表空间

删除加密表空间中的tde1

impdp导入表空间

查看加密表空间中的tde1表中数据

加密表空间支持bitmap index

加密表空间支持INDEX RANGE SCAN

加密表空间支持LOB类型

参考文献

Master Note For Transparent Data Encryption ( TDE ) (文档 ID 1228046.1)

11g New Feature : Transparent Data Encryption at Tablespace Level (文档 ID 432776.1)

10gR2: How to Export/Import with Data Encrypted with Transparent Data Encryption (TDE) (文档 ID 317317.1)

11g New Feature : Transparent Data Encryption at Tablespace Level (文档 ID 432776.1)

未经允许不得转载:Oracle一体机用户组 » Oracle 11G Transparent Data Encryption(TDE)用于透明数据加密表空间

相关推荐