排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
PolarDB for PostgreSQL透明加密
PolarDB for PostgreSQL透明加密
yanzongshuaiDBA
2022-11-11
466
PolarDB for PostgreSQL透明加密
简介
透明加密
TDE(Transparent Data Encryption)通过在数据库层执行静止数据加密,阻止可能的攻击者绕过数据库直接从存储读取敏感信息。经过数据库身份认证的应用和用户可以继续透明地访问数据,而尝试读取数据库文件中敏感数据的操作系统用户或者未经认证的用户将不允许访问数据。
PolarDB for PG透明加密使用方法
1)
编译代码时需要指定
--with-openssl
2)
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_hmac
2)
hmac和result_hmac进行校验
3)
keyEncKey和pg_kmgr中的key作为入参,通过ossl_wrap_key函数打开数据加密的密钥relEncKey
数据加密:
1)
在
FlushBuffer->PageEncryptCopy中对数据页进行加密
2)
调用
ossl_encrypt_data函数使用relEncKey和page的lsn+blocknum(作为salt)对数据进行加密
polardb
postgresql
初始化
数据加密
文章转载自
yanzongshuaiDBA
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨