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

相关文章

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Java实现预览与打印功能详解

《Java实现预览与打印功能详解》在Java中,打印功能主要依赖java.awt.print包,该包提供了与打印相关的一些关键类,比如PrinterJob和PageFormat,它们构成... 目录Java 打印系统概述打印预览与设置使用 PageFormat 和 PrinterJob 类设置页面格式与纸张

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要