openGauss学习笔记-128 openGauss 数据库管理-设置透明数据加密(TDE)

本文主要是介绍openGauss学习笔记-128 openGauss 数据库管理-设置透明数据加密(TDE),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • openGauss学习笔记-128 openGauss 数据库管理-设置透明数据加密(TDE)
      • 128.1 概述
      • 128.2 前提条件
      • 128.3 背景信息
      • 128.4 密钥管理机制
      • 128.5 表级加密方案
      • 128.6 创建加密表
      • 128.7 切换加密表加密开关
      • 128.8 对加密表进行密钥轮转

openGauss学习笔记-128 openGauss 数据库管理-设置透明数据加密(TDE)

128.1 概述

透明数据加密(Transparent Data Encryption),是数据库在将数据写入存储介质时对数据进行加密,从存储介质中读取数据时自动解密,防止攻击者绕过数据库认证机制直接读取数据文件中的数据,以解决静态数据泄露问题。该功能对于应用层几乎透明无感知,用户可根据需要决定是否启用透明数据加密功能。

128.2 前提条件

  • 需要由密钥管理服务KMS对数据加密密钥提供保护,数据库可以正常访问KMS服务。KMS服务可在华为云数据加密服务DEW申请开通。
  • 需要将GUC参数enable_tde设置为on,开启数据库透明数据加密开关。同时需正确设置数据库实例主密钥ID参数tde_cmk_id。

128.3 背景信息

当前版本主要实现对接华为云KMS服务,支持表级密钥存储,实现对行存表加密,规格约束如下:

  • 支持heap存储行存表加密。
  • 不支持列存表加密,不支持物化视图加密,不支持ustore存储引擎加密。
  • 不支持索引和Sequence加密,不支持XLOG日志加密,不支持MOT内存表加密,不支持系统表加密。
  • 用户在创建表时可以指定加密算法,加密算法一旦指定不可更改。如果创建表时设置enable_tde为on,但是不指定加密算法encrypt_algo,则默认使用AES_128_CTR加密算法。
  • 如果在创建表时未开启加密功能或指定加密算法,后续无法再切换为加密表。
  • 对于已分配加密密钥的表,切换表的加密和非加密状态,不会更换密钥和加密算法。
  • 数据密钥轮转只有开启表加密功能时才支持轮转。
  • 不支持单数据库实例跨region的多副本主备同步,不支持单数据库实例跨region的扩容,不支持跨region的备份恢复、数据库实例容灾和数据迁移场景。
  • 混合云场景如果使用华为云KMS和管控面功能,则可以支持透明数据加密,其他KMS服务如果接口不兼容则无法支持。
  • 加密表的查询性能比不加密时会有所劣化,对于性能有较高要求的情况下需谨慎开启加密功能。

128.4 密钥管理机制

透明数据加密功能中数据的加密和解密都依赖于安全可靠的密钥管理机制。本功能采用三层密钥结构实现密钥管理机制,即根密钥(RK)、主密钥(CMK)和数据加密密钥(DEK)。主密钥由根密钥加密保护,数据加密密钥由主密钥加密保护。数据加密密钥用于对用户数据进行加密和解密,每个表对应一个数据加密密钥。根密钥和主密钥保存在KMS服务中,数据加密密钥通过向KMS服务申请创建,创建成功可同时返回密钥明文和密文。数据加密密钥明文在内存中会使用hash表进行缓存减少访问KMS频次以提升性能,密钥明文只存在内存中使用不会落盘,并且支持自动淘汰机制删除不常使用的密钥明文,只保存最近1天内使用的密钥明文。数据加密密钥密文保存在数据库中并落盘持久化。对用户表数据加解密时,如果内存中没有对应密钥明文则需向KMS申请对数据密钥解密后再使用。

128.5 表级加密方案

允许用户在创建表时指定是否对表进行加密和使用的加密算法,加密算法支持AES_128_CTR和SM4_CTR两种算法,算法一旦指定不可更改。对于创建表时指定为加密的表,数据库会自动为该表申请创建数据加密密钥,并将加密算法、密钥密文和对应主密钥ID等参数使用"keyword=value"格式保存在pg_class系统表中的reloptions字段中。

对于加密表,允许用户切换表的加密状态,即将加密表切换为非加密表,或将非加密表切换为加密表。如果在创建表时未使能加密功能,后续无法再切换为加密表。

对于加密表,支持数据加密密钥轮转。密钥轮转后,使用旧密钥加密的数据仍使用旧密钥解密,新写入的数据使用新密钥加密。密钥轮转时不更换加密算法。

对于行存表,每次加解密的最小数据单元为一个8K大小的page页面,每次对page页面加密时会通过安全随机数接口生成IV值,并将IV值和密钥密文、主密钥ID等信息保存在页面中一起写入存储介质。对于加密表由于page页面中需要保存加密密钥信息,相比不加密时占用存储空间膨胀约2.5%。

128.6 创建加密表

登录数据库,创建加密表tde_test1,加密状态为开启,指定加密算法为AES_128_CTR:

openGauss=# CREATE TABLE tde_test (a int, b text) with (enable_tde = on, encrypt_algo = 'AES_128_CTR');

创建加密表tde_test2,加密状态为开启,不指定加密算法,则加密算法默认为AES_128_CTR:

openGauss=# CREATE TABLE tde_test2 (a int, b text) with (enable_tde = on);

创建加密表tde_test3,加密状态为关闭,指定加密算法为SM4_CTR:

openGauss=# CREATE TABLE tde_test3 (a int, b text) with (enable_tde = off, encrypt_algo = 'SM4_CTR');

128.7 切换加密表加密开关

登录数据库,将加密表tde_test1的加密开关置为off:

openGauss=# ALTER TABLE tde_test1 SET (enable_tde=off);

将加密表tde_test1的加密开关置为on:

openGauss=# ALTER TABLE tde_test1 SET (enable_tde=on);

128.8 对加密表进行密钥轮转

登录数据库,对加密表tde_test1进行密钥轮转:

openGauss=# ALTER TABLE tde_test1 ENCRYPTION KEY ROTATION;

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

图片

这篇关于openGauss学习笔记-128 openGauss 数据库管理-设置透明数据加密(TDE)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

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

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

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

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

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

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