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

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装