Transparent Data Encryption (TDE)
TDE能够加密存储在表和表空间中的敏感数据,对于可以访问数据的数据库用户或应用程序,加密的数据被透明地解密。TDE有助于在存储媒体或数据文件被盗的情况下保护存储在媒体上的数据。
DE对存储在数据文件中的敏感数据进行加密
TDE将加密密钥存储在数据库外部的安全模块中
TDE不需要额外的维护,对用户透明
应用程序不参与加密和解密,加密和解密由数据库完成
加密密钥自动产生,不需要用户管理。只需要做好备份,不要丢失即可。
如果是dg环境,备库也要相关操作,请谨慎操作,否则会导致同步停止。
TDE 不支持对外键约束中使用的列进行加密。这是因为各个表有自己独有的加密密钥。以下查询可以列出数据库中存在的所有 RI(引用完整性)约束:
SQL> select A.owner, A.table_name, A.column_name, A.constraint_name
from dba_cons_columns A, dba_constraints B
where A.table_name = B.table_name and B.constraint_type = 'R';
TDE 表空间加密透明地支持所有索引。而对于 TDE 列加密,索引必须是用于等式搜索的普通 B 树索引。如果是基于函数的复合索引,则不能对相应函数使用的列进行加密。当对已有索引的列进行加密时,建议首先利用 dbms_metadata.get_ddl 获取索引定义,然后丢弃该索引,使用“no salt”选项对该列进行加密,最后重建索引。
使用 TDE 加密后的数据在从数据库文件中读回时会被解密。因此,如果在网络上传输该数据,它将处于明文状态。
对于 TDE 列加密,加密数据在 SGA 中仍保持加密状态,但是对于 TDE 表空间加密,数据在 SGA 中已被解密,从而提供 100% 的透明性。
TDE 是 Oracle Advanced Security 选件的一部分,该选件还包含网络加密和强身份验证。Oracle 企业版客户可以使用该选件。
查看数据库组件:
SET lines 90 NUMWIDTH 12 PAGES 10000 LONG 2000000000
ALTER SESSION SET nls_date_format='YYYY-MM-DD HH24:MI:SS';
COL version FORMAT a12
COL comp_id FORMAT a8
COL schema LIKE version
COL comp_name FORMAT a35
COL status FORMAT a12
SELECT comp_id,schema,status,version,comp_name FROM dba_registry;
透明数据加密(TDE)具有以下优点:
作为安全管理员,您可以确保敏感数据是安全的,以防存储媒体或数据文件被盗。
1,实现TDE可以帮助您解决与安全性相关的法规遵从性问题。
2,您不需要为授权用户或应用程序创建触发器或视图来解密数据。对于数据库用户和应用程序,表中的数据被透明地解密。
3,数据库用户和应用程序不需要知道他们访问的数据是以加密的形式存储的。对于数据库用户和应用程序,数据被透明地解密。
4,不需要修改应用程序来处理加密的数据。数据加密和解密由数据库管理。
5,密钥管理操作是自动化的。用户或应用程序不需要管理加密密钥。
TDE可以对表的列或表空间做加密
TDE表空间加密使您能够加密整个表空间。在加密的表空间中创建的所有对象都会自动加密。
TDE表空间加密利用了批量加密和缓存来提供增强的性能。虽然对应用程序的实际性能影响可能有所不同,但性能开销大致估计在5%到8%之间。
TDE表空间加密对存储在加密表空间中的所有数据进行加密。这包括内部大型对象(lob),如blob和clob。
TDE表空间加密不加密存储在表空间之外的数据。例如,BFILE数据没有加密,因为它存储在数据库之外。如果在加密的表空间中创建具有BFILE列的表,则不会加密此特定列。但
加密表空间中的所有数据都以加密格式存储在磁盘上。对于具有查看或修改数据的必要特权的授权用户,数据被透明地解密。数据库用户或应用程序不需要知道特定表中的数据是否在磁盘上加密。如果磁盘或备份媒体上的数据文件被盗,数据不会受到影响。
TDE表空间加密使用两层的、基于密钥的体系结构来透明地加密(和解密)表空间。TDE主密钥存储在外部安全模块(Oracle Wallet或HSM)中。TDE主密钥用于加密TDE表空间加密密钥,而TDE表空间加密密钥又用于加密和解密表空间中的数据。
Oracle Database 11g Release 2(11.2)允许Oracle Real Application Clusters (Oracle RAC)节点共享钱包。这消除了在所有节点之间手动复制和同步钱包的需要。Oracle建议在共享文件系统上创建钱包。这允许所有实例访问同一个共享钱包。
在任何一个Oracle RAC实例上执行的任何钱包操作(比如打开或关闭钱包)都适用于所有其他Oracle RAC实例。这意味着,当您为一个实例打开和关闭钱包时,它将为所有Oracle RAC实例打开和关闭。
在使用共享文件系统时,需要确保所有Oracle RAC实例的ENCRYPTION_WALLET_LOCATION或WALLET_LOCATION参数指向相同的共享钱包位置。安全管理员还需要通过分配适当的目录权限来确保共享钱包的安全性。
在一个实例上执行的主键rekey适用于所有实例。当一个新的Oracle RAC节点出现时,它知道当前钱包的打开或关闭状态。
如果您没有使用共享文件系统来存储钱包,那么您需要在主密钥rekey之后将钱包复制到所有节点。如果您需要重置数据库的主加密密钥,请使用以下步骤:
1,在第一个Oracle RAC节点上重置主加密密钥。
2,将新的主加密密钥钱包从第一个节点复制到所有其他节点。
3,关闭并重新打开任何一个节点上的钱包。使用以下命令:
SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "password";
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
Oracle RMAN 如何处理加密数据?
Oracle 透明数据加密和 Oracle RMAN
应用数据 | RMAN 压缩备份 | RMAN 加密备份 | RMAN 压缩和加密备份 |
---|---|---|---|
未加密 | 压缩数据 | 加密数据 | 数据先压缩再加密 |
使用 TDE 列进行加密 | 压缩数据;将加密列视为未加密 | 加密数据;对加密列双重加密 | 数据先压缩再加密;将加密数据视为未加密;对加密列双重加密 |
使用 TDE 表空间加密进行加密 | 对加密的表空间进行解密、压缩和重新加密 | 加密的表空间原样传送给备份 | 对加密的表空间进行解密、压缩和重新加密 |
当存在本地 TDE 主加密密钥时“透明”加密[和压缩]的示例:
RMAN> connect target <ORACLE_SID>/<SYS pwd>RMAN> set encryption on;RMAN> backup [as compressed backupset] database;
无论使用 TDE 主加密密钥还是密码短语对文件进行加密,对发送到磁盘的 RMAN 备份进行加密都需要 Advanced Security 选件的许可。
TDE 可否与 Data Guard、Streams 和 Oracle Golden Gate 协同工作?
可以。当 TDE 用于 Data Guard 物理备用数据库(10gR2 及更高版本)时,在向辅助数据库传输数据的过程中加密数据在日志文件中仍保持加密状态,此时可以选择使用 ASO 网络加密在传输过程中对磁盘上未加密的数据进行加密。请参阅 Metalink 说明 749947.1 了解如何配置 ASO 自带的网络加密,并参阅 Metalink 说明 1143443.1 了解如何配置基于 SSL 的加密。对此,必须将包含主密钥的钱夹复制到全部物理备用数据库站点并打开该钱夹,不管是仅应用重做日志、以只读方式打开、在 Active Data Guard 中打开(只读和应用重做日志),还是进行角色转换(切换或故障切换)都是如此。
当 TDE 用于 Data Guard 逻辑备用数据库 (11gR1) 时,必须将包含主密钥的钱夹复制到辅助站点并打开该钱夹,以便 SQL Apply 可以对从日志文件中读取的数据进行解密。在将传入数据写入逻辑备用数据库时,可以使用同样的主加密密钥对数据进行加密。加密数据在日志文件中保持加密状态,并且在日志文件被传送到辅助数据库的传输过程中仍保持加密状态;Oracle 网络加密是可选的。请参阅 Metalink 说明 749947.1 了解如何配置 ASO 自带的网络加密,并参阅 Metalink 说明 1143443.1 了解如何配置基于 SSL 的加密。
当 TDE 与 11gR1 中的 Streams 一起使用时,在活动数据库之间以明文传输数据,以允许数据转换(字符集、数据库版本、平台等)。当无法到达接收端且需要临时存储数据时,加密列以加密形式存储在磁盘上。在 11gR1 之前的数据库版本中,Streams 将加密列视为“不受支持的数据类型”,因此跳过这些表。
可否使用带有直接路径的 SQL*Loader 将数据加载到包含加密列的表中?
可以。如果目标表包含加密列,数据将在加载时进行加密。以下简单示例说明了如何使用带有直接路径的 SQL*Loader。只需将 ulcase6.sql 中的一行从
sal number(7,2),
更改为
sal number(7,2) encrypt,
并使用 SQL*Loader 的正确语法:
$ sqlldr USERID=scott/tiger CONTROL=ulcase6.ctl LOG=ulcase6.log DIRECT=TRUE
TDE的一些问题链接:
https://www.cnblogs.com/buffercache/p/10797670.html
https://www.oracle.com/technetwork/cn/topics/security/tde-faq-099527-zhs.html
《Step by step method to implement Transparent Data Encryption (TDE) in 11g Data Guard and 11g RAC environments (文档 ID 1627807.1)》