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集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt