PolarDB for PostgreSQL透明加密

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PolarDB for PostgreSQL透明加密

PolarDB for PostgreSQL透明加密


简介


透明加密TDE(Transparent Data Encryption)通过在数据库层执行静止数据加密,阻止可能的攻击者绕过数据库直接从存储读取敏感信息。经过数据库身份认证的应用和用户可以继续透明地访问数据,而尝试读取数据库文件中敏感数据的操作系统用户或者未经认证的用户将不允许访问数据。


PolarDB for PG透明加密使用方法


1)编译代码时需要指定--with-openssl2)initdb初始化集群时需要指定密码短语和加密算法。增加了2个选项,如下:--cluster-passphrase-command 'xxx' -e aes-256其中cluster-passphrase-command参数后面接获取加密密钥的命令(可以是一个字符串),可以是具体的KMS获取明文密钥的接口命令;-e参数接数据加密所采用的加密算法,支持AES-128 和AES-256两种,表示密钥为128位和256位的AES算法


机制

1、initdb的过程

1)initdb首先读取外部参数,得到加密算法以及加密短语,并将加密短语写入postgresql.con文件中,以供后续使用。2)initdb的bootstrap_template1函数产生执行的cmd命令字符串后,通过PG_CMD_OPN即popen创建一个管道,调用fork产生一个子进程,执行该命令。3)实际上boot初始化时,调用堆栈:      AuxiliaryProcessMain->BootStrapXLOG          ->BootstrapModeMain   BootStrapXLOG调用BootStrapKmgr初始化密钥系统,其入参为 bootstrap_data_encryption_cipher,即上面-e的参数4)BootStrapKmgr将加密模式、表和WAL的密钥及密钥密文的信息摘要存入二进制文件global/pg_kmgr中。5)首先通过BootStrapXLOG生成加密相关信息,后面BootstrapModeMain初始化template时会对相关数据使用相应加密算法进行加密。


2、加密算法的选用


加密算法:

加密算法的选用:

加密模式使用CTR(技术器模式),因为CTR加密可以保证明文和密文长度相等。这是由数据块的大小决定的,内存和磁盘上块大小默认是8KB。


3、需要加密的数据


其中,上表加粗处理的文件中含有用户数据,可以分为以下六类:1)表数据:直接含有用户的敏感数据,必须加密。2)临时文件:只是周期性临时存在,可以选择不加密。3)共享数据:包含数据库名和用户名,一般敏感程度不高,可以选择不加密。4)逻辑复制数据:只有打开逻辑复制才需要进行加密。当前版本为了逻辑复制的目的端的兼容性,暂时不加密。5)统计信息:不直接包含用户数据,但是包含用户数据的统计信息,可以选择不加密。但是需要注意某些统计信息对用户来说可能比较敏感。6)预写式日志:通过一定的解密可以获取部分的有效数据。当前版本为了复制的目的端的兼容性,暂时不加密,但是会分配预写式日志的加密密钥,即上文中的WDEK,便于后期兼容。


4、加密的过程


加密过程如下图所示:

初始化时:1)初始化时,密码短语解析出keyEncKey和hmackey,密码短语会存储到postgresql.conf配置文件中2)generate_key_and_hmac函数生成一个随机数,先放到relEncKey中3)pg_wrap_key函数使用keyEncKey对随机数relEncKey进行加密生成密钥,即pg_kmgr文件中保持的key和hmac启动后,需要由函数InitializeKmgr先生成relEncKey:1)postgresql.conf文件中读取密码短语,通过get_key_and_hmackey_from_passphrase函数得到keyEncKey和result_hmac2)hmac和result_hmac进行校验3)keyEncKey和pg_kmgr中的key作为入参,通过ossl_wrap_key函数打开数据加密的密钥relEncKey数据加密:1)FlushBuffer->PageEncryptCopy中对数据页进行加密2)调用ossl_encrypt_data函数使用relEncKey和page的lsn+blocknum(作为salt)对数据进行加密

目录
相关文章
|
27天前
|
关系型数据库 MySQL 分布式数据库
云原生数据库PolarDB MySQL版的体验评测
我有幸参与了云原生数据库PolarDB MySQL版的体验评测。在这次评测中,我主要关注了以下几个方面:产品控制台操作体验、产品文档阅读体验、产品API使用体验、控制台产品监控页面以及生态周边。
45 11
云原生数据库PolarDB MySQL版的体验评测
|
1天前
|
存储 关系型数据库 MySQL
再探PolarDB —— PolarDB MySQL 四大场景下的全方位评测
本文全面评测了阿里云PolarDB MySQL在四大关键场景下的表现:Serverless极致弹性、列存索引(IMCI)、弹性并行查询(ePQ)以及无感秒切高可用。通过官方提供的免费体验资源,我们深入了解了PolarDB MySQL的核心能力和性能。Serverless极致弹性列存索引(IMCI弹性并行查询(ePQ)无感秒切高可用此外,文章还介绍了PolarDB MySQL在数据备份和HTAP(混合事务/分析处理)场景下的优势,包括灵活的备份策略、高效的全量和库表恢复方式,以及通过IMCI支持的HTAP能力。这些特性共同构成了PolarDB MySQL作为一款先进的云数据库服务的强大竞争力。
|
12天前
|
存储 关系型数据库 分布式数据库
揭秘PolarDB:中国云原生数据库的超级英雄,如何颠覆传统数据存储?
【8月更文挑战第8天】在数字化时代,数据成为企业的核心资产。随着云技术的发展,企业纷纷向云端迁移,选择合适的云原生数据库至关重要。PolarDB凭借卓越性能、高可靠性和易用性在中国市场领先。它采用存储计算分离架构,支持独立扩展,提高处理大规模数据的效率和灵活性。多副本机制确保数据高可用性和持久性,优于单副本存储方案。兼容多种数据库引擎,提供丰富管理工具,降低迁移和维护成本。按量付费模式帮助企业有效控制成本。因此,PolarDB为企业数字化转型提供了强有力的支持。
41 1
|
20天前
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之如何进行PostgreSQL(简称PG)的全量和增量备份管理
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
20天前
|
运维 关系型数据库 MySQL
PolarDB产品使用问题之PolarDB MySQL版和PolarDB-X的区别是什么
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
24天前
|
存储 关系型数据库 分布式数据库
PolarDB产品使用问题之如何查看PolarDB for PostgreSQL的备份信息
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
25天前
|
关系型数据库 测试技术 分布式数据库
PolarDB:中国云原生数据库的领军者
数据库社区“墨天轮”公布了2024年最新一期中国数据库流行度排行榜,阿里云瑶池旗下的自研云原生数据库PolarDB夺冠
|
26天前
|
关系型数据库 MySQL 分布式数据库
云原生数据库PolarDB MySQL版评测报告
云原生数据库PolarDB MySQL版评测报告
31 4
|
20天前
|
人工智能 关系型数据库 MySQL
探索和体验云原生数据库PolarDB MySQL版在AI场景中的应用
探索和体验云原生数据库PolarDB MySQL版在AI场景中的应用
132 0
|
1月前
|
SQL 存储 关系型数据库
关系型数据库PostgreSQL学习
【7月更文挑战第4天】
433 2