前置知识: PostgreSQL

数据加密存储

00:00
1 min Advanced 2026/6/14

PostgreSQL数据加密存储:pgcrypto扩展、加密函数、列级加密与密钥管理

1. pgcrypto 扩展

CREATE EXTENSION pgcrypto;

2. 哈希函数

-- MD5(不推荐用于安全场景)
SELECT md5('password');

-- SHA-256
SELECT encode(digest('password', 'sha256'), 'hex');

-- bcrypt(推荐用于密码存储)
SELECT crypt('password', gen_salt('bf'));
-- 验证
SELECT crypt('password', stored_hash) = stored_hash;

3. 加密函数

-- 对称加密(AES-256)
SELECT encrypt('secret data', 'my_key', 'aes');
SELECT decrypt(encrypt('secret data', 'my_key', 'aes'), 'my_key', 'aes');

-- pgp对称加密
SELECT pgp_sym_encrypt('secret data', 'my_password');
SELECT pgp_sym_decrypt(pgp_sym_encrypt('secret data', 'my_password'), 'my_password');

-- pgp公钥加密
SELECT pgp_pub_encrypt('secret data', dearmor(public_key));
SELECT pgp_pub_decrypt(encrypted_data, dearmor(private_key), 'passphrase');

4. 列级加密

-- 加密列
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    ssn BYTEA  -- 加密存储
);

-- 插入加密数据
INSERT INTO users (name, ssn) VALUES (
    'Alice',
    pgp_sym_encrypt('123-45-6789', 'encryption_key')
);

-- 查询解密
SELECT name, pgp_sym_decrypt(ssn, 'encryption_key') AS ssn
FROM users;

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式