Oracle-TDE数据加密功能

2024-04-19 04:44
文章标签 oracle 数据 加密 功能 tde

本文主要是介绍Oracle-TDE数据加密功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 Oracle TDE

        1.1 TDE介绍

        Oracle TDE是数据库层对存储的用户敏感数据进行的静态加密,加密数据满足主流的安全法规(如 PCI DSS)相关的加密要求,可以防止数据文件被其他非数据库读取方式访问的情况下(如通过工具直接打开读取数据文件块的方式)被窃取明文数据,加密操作过程对用户和应用完全透明。

        1.2 TDE加密两层加密体系

        TDE使用两层加密密钥体系结构,包括两层:

        第一层:主加密密钥master key:用于加密列加密和表空间加密的密钥

        第二层:表或是表空间密钥:表密钥是用于加密一个或多个特定列的密钥,无论表中的加密列数如何,都只有一个密钥,它将存储在数据字典中;表空间密钥是用于加密表空间的密钥,表空间密钥存储在加密表空间的每个数据文件头中。

表和表空间密钥使用主密钥进行加密。主密钥存储在外部安全模块中,该模块可以是以下模块之一:

        1 Oracle Wallet - 数据库外部的安全容器。它是用密码加密的。

        2 硬件安全模块 (HSM) - 用于保护密钥和执行加密操作的设备。Oracle 使用 HSM 供应商提供的PKCS#11 库连接到设备。

        3 Oracle Key Vault - Oracle推出的是一款全栈、安全强化的软件一体机,旨在集中管理企业内的密钥和安全对象,初始版本12.1,目前最新版本21.8。

        4 OCI Vault - Key Management。

        1.3 加密算法

        11G加密算法,表空间默认算法AES128,列加密默认算法AES192。

90230297f68415f80cee9526dbcaafe1.png

        19c加密算法,表空间默认算法AES128,列加密默认算法AES192。

 

61a8d1c838b09b0ffadce55ced0d0500.png

        1.4 TDE加密的范围

        1 Oracle 10.2版本可以对表列进行加密。

        2 Oracle 11.1之后可以对表空间进行加密。

        1.5 TDE加密实现过程

        TDE可以对整个表空间开启加密模式,只要存储在表空间里面的对象,都会自动对磁盘里面的数据进行加密,包括加密数据的redo日志、数据文件的物理备份文件都会进行加密,但TDE不会加密存储在表空间外部的数据,比如BFILE列数据,数据库只存放了一个指针信息,实际存储的文件数据是在数据库的外部,这部分的数据是不会被TDE所加密。TDE还可以开启表列单独加密的,只针对开启加密的列数据进行加密,其他没有开启加密的列,不会进行加密。TDE的加密和解密过程对用户来说完全透明,对于查看或是修改数据的用户来说,操作TDE加密的数据不需要额外的操作步骤,需要注意的是在配置了TDE数据库中,任何有权访问加密表的用户都能够以明文形式查看数据,因为用户通过查询的表数据都是数据库解密之后的返回明文数据,数据库只是在对数据文件里面存储的数据进行加密,不会对查询显示出来的数据进行加密处理,对于数据显示的加密需要使用Oracle Data Redaction技术。

        TDE表列数据加密和解密过程如下,首先需要打开外部的密钥存储模块(比如Oracle wallet,需要通过密码打开或是配置auto-login自动打开),拿到第一层的主密钥master key(PKCS#12格式由ewallet.p12生成),其次,通过主密钥加密和解密第二层的表密钥,表的密钥存储在数据字典中,最后通过表密钥对表列里面的数据进行加密和解密。

ab88a98811945d4a2b2f031a0495b910.png

        TDE表空间加密和解密过程如下,首先需要打开外部的密钥存储模块(比如Oracle wallet,需要通过密码打开或是配置auto-login自动打开),拿到第一层的主密钥master key(PKCS#12格式由ewallet.p12生成),其次,通过主密钥加密和解密第二层的表空间密钥,表空间密钥存储在加密表空间的每个数据文件头中,最后,通过表空间密钥对表空间存储的数据进行加密和解密。

d0b7bdc4ff5f42ed9d08df698d7b4cf1.png

        TDE表空间加密适合那些需要大规模对表进行加密或是整个表加密的场景,它可以减少列加密的分析工作,此外,TDE 表空间加密还利用批量加密和缓存来增强的加密性能。TDE表列加密适合那些只针对某些特定表列加密的场景,加密操作更加的灵活。

        1.6 TDE表空间加密使用风险与限制:

        1 性能的问题,数据的加密以及解密会消耗额外的CPU资源,特别是SQL对于大数据量的扫描,这个消耗可能会更明显,Oracle官方给出的性能开销为5%~8%。
        2 默认的加密只对新建的表空间表数据有作用,对已有的表空间需要手动进行转换,转换的方式有
          a 将数据从非加密的表空间迁移到加密的表空间,比如通过move tablespace操作。
          b 11G、12.1版本可以通过安装Patch 22066671实现将offline 表空间转换为加密表空间。
          c 12.2之后可以实现将表空间在线online转换为加密表空间。

        3 一旦启用加密了表空间所以如果密钥钱包丢失了,可能数据就无法重新再解密了,要做好加密钱包的备份。

        4 备份恢复操作需要考虑加密配置和单独的密钥备份。

        5 存储外部大对象,比如BFILE无法进行加密。

        6 在12.2之前SYSTEM, SYSAUX, UNDO and TEMP表空间不能进行加密,在12.2之后,虽然可以对SYSTEM, SYSAUX, UNDO and TEMP进行加密,但需要永远打开密钥库,因此Oracle不推荐进行加密,直到19c之后,对于SYSTEM, SYSAUX, UNDO and TEMP的加密进行优化,关闭密钥库也不影响,Oracle官方不再不推荐。

        7 在12.2版本之前,对于用create tablespace xx encryption创建的加密表空间,无法DECRYPT解密。

        1.7 Oracle TDE的表列加密使用风险与限制:

        1 表不能创建B-tree以外的其他索引

        2 列上的索引不能使用索引范围扫描

        3 存储外部大对象,比如BFILE无法进行加密

        4 不能对加密表列进行数据同步抽取

        5 不能使用传输表空间功能

        6 列不能作为外键

        7 加密字段只支持以下类型

        8 每行数据需要额外的存储8-52字节。

          a 一定会增加的存储加密key使用的字节8-16字节,根据使用的算法,AES使用128 bits(128/8 = 16bytes) 16字节, 3DES 8字节。

          b 可能增加的存储20字节,用于完整性检查默认为配置SHA-1完整性算法检查,可以通过NOMAC选项关闭完整性检查。

          c 可能增加的存储16字节,使用'SALT'加密的列,可以通过'NO SALT'选项避免

        9 对队列进行加密,可能会产生额外的日志。

        10 性能的问题,数据的加密以及解密会消耗额外的CPU资源,特别是SQL对于大数据量的扫描,这个消耗可能会更明显。

        11 SYS对象不能进行加密。

        12 加密的列长度限制。

1fcbb239dfbe6fae1f84fcd7d13199fb.png

Tip:欢迎关注公众号:勇敢牛牛的笔记,超100+的原创内容,每周不定期更新数据库技术文章

 

这篇关于Oracle-TDE数据加密功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/916655

相关文章

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

通过ibd文件恢复MySql数据的操作方法

《通过ibd文件恢复MySql数据的操作方法》文章介绍通过.ibd文件恢复MySQL数据的过程,包括知道表结构和不知道表结构两种情况,对于知道表结构的情况,可以直接将.ibd文件复制到新的数据库目录并... 目录第一种情况:知道表结构第二种情况:不知道表结构总结今天干了一件大事,安装1Panel导致原来服务

Jmeter如何向数据库批量插入数据

《Jmeter如何向数据库批量插入数据》:本文主要介绍Jmeter如何向数据库批量插入数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Jmeter向数据库批量插入数据Jmeter向mysql数据库中插入数据的入门操作接下来做一下各个元件的配置总结Jmete

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

Oracle登录时忘记用户名或密码该如何解决

《Oracle登录时忘记用户名或密码该如何解决》:本文主要介绍如何在Oracle12c中忘记用户名和密码时找回或重置用户账户信息,文中通过代码介绍的非常详细,对同样遇到这个问题的同学具有一定的参... 目录一、忘记账户:二、忘记密码:三、详细情况情况 1:1.1. 登录到数据库1.2. 查看当前用户信息1.

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq