postgresql 字段加解密

本文介绍如何在PostgreSQL中安装并启用pgcrypto加密模块,并提供了加密和解密函数的详细用法,包括参数解释及示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一: 查看是pg 版本, 低于13版本的可能会报错

  select * from version();

二: 查看是否安装了 加密模块:

 

如果没有安装则进行安装:

进入postgresql的源安装包文件夹,进入contrib目录,找到pgcrypto文件夹,进入进行编译安装,命令如下:

make USE_PGXS=1
make install

命令执行完毕执行上一步查看是否安装成功;

启用插件:

CREATE EXTENSION pgcrypto;

三: 命令说明

    encrypt(data bytea,key bytea,type text) returns bytea 

    decrypt(data bytea,key bytea,type text) returns bytea 

    encrypt_iv(data bytea,key bytea,iv bytea,type text) returns bytea 

    decrypt_iv(data bytea,key bytea,iv bytea,type text) returns bytea

其中,data 是需要加密的数据;type 用于指定加密方法。type 参数的语法如下:

algorithm[- mode][/pad: padding]

其中 algorithm 的可能取值如下:bf,Blowfish 算法,aes,AES 算法(Rijndael-128、-192 或者-256)

mode 的可能取值如下:cbc,下一个块依赖于前一个块(默认值)ecb,每个块独立加密(仅用于测试)

padding 的可能取值如下:pkcs,数据可以是任意长度(默认值);none,数据长度必须是密码块大小的倍数

四: 示例

4.1: 带iv 的 加解密:

加密:

解密:

与之匹配的java代码:

加密:

解密:

参考:

PostgreSQL: Documentation: 15: 19.8. Encryption Options

postgre自带的pgrypto之encrypt和decrypt - 简书

PostgreSql 加密和解密 - 一品堂.技术学习笔记 - 博客园

### PostgreSQL 加密功能概述 PostgreSQL 提供多种级别的加密支持,确保数据在网络传输、存储和访问过程中的安全性。主要的加密机制涵盖了字段加密、行级加密以及磁盘级加密。 #### 字段加密 为了保护敏感字段的数据,在应用程序层面可以采用对称或非对称算法来处理特定列的信息。这种方式允许开发者针对具体需求设计个性化的加解密逻辑[^1]。 ```sql CREATE EXTENSION pgcrypto; INSERT INTO users (id, name, encrypted_ssn) VALUES (1, 'Alice', crypt('herSSNValue', gen_salt('bf'))); ``` 此代码片段展示了如何利用 `pgcrypto` 扩展模块实现 SSN 列的单向哈希化存储。 #### 行级加密 通过自定义函数或者触发器可以在每一行记录写入时自动执行加密操作,并在读取时进行相应的解码动作。这种方法适用于更细粒度的安全控制场景下。 ```sql CREATE OR REPLACE FUNCTION encrypt_row() RETURNS trigger AS $$ BEGIN NEW.encrypted_data := public.pgp_sym_encrypt(NEW.plain_text_column::text,'your-key'); RETURN NEW; END $$ LANGUAGE plpgsql; CREATE TRIGGER before_insert_update BEFORE INSERT OR UPDATE ON your_table FOR EACH ROW EXECUTE PROCEDURE encrypt_row(); ``` 上述 PL/pgSQL 函数配合触发器实现了表内某列内容基于会话密钥的透明加密/解密流程。 #### 磁盘级加密 对于整个文件系统的加密,则依赖于操作系统层面上的技术方案,比如 Linux 的 LUKS 或 Windows BitLocker 。而从数据库角度出发,可以通过配置参数启用 WAL 日志压缩并设置合理的备份策略间接增强物理介质上持久化对象的安全防护能力[^3]。 另外,PostgreSQL 自身也提供了某些形式下的静态数据保护手段——即当客户端请求访问被标记为需加密的对象时,服务端负责即时完成相应转换工作而不暴露明文给外部环境。 #### 官方文档与最佳实践建议 官方文档详尽描述了有关 SSL/TLS 连接认证、PGP 密钥管理以及其他高级特性等内容;遵循其指导原则有助于构建稳健可靠的加密体系结构[^4]。 - 尽量减少特权账户数量及其权限范围; - 记录详细的审计日志便于事后审查分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值