column_encrypt
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
column_encrypt | 4.0 | SEC | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 7030 | column_encrypt | 否 | 是 | 是 | 是 | 否 | 否 | encrypt |
fixed encrypt schema; create schema encrypt before CREATE EXTENSION; preload column_encrypt;
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 4.0 | 1817161514 | column_encrypt | pgcrypto |
| RPM | PIGSTY | 4.0 | 1817161514 | column_encrypt_$v | - |
| DEB | PIGSTY | 4.0 | 1817161514 | postgresql-$v-column-encrypt | - |
构建
您可以使用 pig build 命令构建 column_encrypt 扩展的 RPM / DEB 包:
安装
您可以直接安装 column_encrypt 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
预加载配置:
创建扩展:
用法
来源:README,v4.0 release,SQL objects
column_encrypt 为 PostgreSQL 提供透明列级加密。它定义 encrypted_text 和 encrypted_bytea 类型,通过类型输入函数加密写入值,通过输出函数解密读取值,并在 encrypt schema 中管理数据加密密钥。
启用
先在服务器启动时加载共享库,重启 PostgreSQL,然后创建 schema 和扩展:
可以把 encrypt 加入 search_path,也可以显式使用 schema 前缀。
注册与加载密钥
扩展使用两层密钥模型,包括密钥加密密钥和数据加密密钥。密文携带 key version 头部,因此轮换密钥后仍可解密旧值。
加密列
当前会话没有加载密钥时,读取加密值会报解密错误。
密钥操作
常用函数包括 encrypt.activate_key、encrypt.revoke_key、encrypt.rotate、encrypt.verify、encrypt.unload_key、encrypt.loaded_cipher_key_versions、encrypt.blind_index。
不能直接暴露明文值的查找场景,可以使用 blind index:
注意事项
扩展有意拒绝加密值的 binary send/receive。相等和哈希语义基于解密后的明文;不支持范围排序。从旧的密文哈希语义升级后,需要重建加密列上的哈希索引。