列级加密的目标与适用场景
技术选型与对比
| 方案 | 加密位置 | 明文可见范围 | 典型算法 | 适用场景 | 主要限制 |
|---|---|---|---|---|---|
| 列级加密(应用/SQL函数) | 应用或数据库函数内对列值加密 | 仅持有密钥的客户端/模块 | AES-128/192/256 | 少量高敏字段、需应用侧控制 | 影响索引/排序/外键;需密钥管理 |
| 透明数据加密(TDE) | 数据文件/表空间层 | 数据库进程内明文 | AES | 全库/表空间静态数据防护 | 不解决列级细粒度与DBA可见问题 |
| Always Encrypted(SQL Server) | 客户端加密 | 仅客户端可见明文 | AES | 高合规、职责分离(DBA不可见) | 查询能力受限,需驱动/连接配置 |
| 动态数据屏蔽(DDM) | 查询层改写结果 | 查询时屏蔽 | 掩码规则 | 展示层脱敏、开发/测试 | 非真正加密,不能替代加密 |
| 文件/磁盘/备份加密 | OS/存储/备份层 | 存储/备份介质层面 | 厂商实现 | 离线介质与备份泄露防护 | 运行时内存/查询仍可能见明文 |
| 说明:列级加密通常选用对称加密(AES)以获得性能;非对称(如RSA/ECC)更适合密钥封装或极小数据量;混合加密(RSA封装AES密钥)常用于安全分发。 |
实现步骤与数据库示例
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword!';
CREATE CERTIFICATE YourCert WITH SUBJECT = 'Column Encryption Cert';
CREATE SYMMETRIC KEY YourSymKey WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE YourCert;
-- 写入
OPEN SYMMETRIC KEY YourSymKey DECRYPTION BY CERTIFICATE YourCert;
INSERT INTO YourTable(EncryptedCol) VALUES (EncryptByKey(Key_GUID('YourSymKey'), N'Sensitive Data'));
CLOSE SYMMETRIC KEY YourSymKey;
-- 读取
OPEN SYMMETRIC KEY YourSymKey DECRYPTION BY CERTIFICATE YourCert;
SELECT CONVERT(NVARCHAR(4000), DecryptByKey(EncryptedCol)) FROM YourTable;
CLOSE SYMMETRIC KEY YourSymKey;
CREATE EXTENSION IF NOT EXISTS pgcrypto;
-- 写入
INSERT INTO your_table(encrypted_column)
VALUES (pgp_sym_encrypt('your_data', 'your_password'));
-- 读取
SELECT pgp_sym_decrypt(encrypted_column, 'your_password') FROM your_table;
from cryptography.fernet import Fernet
key = Fernet.generate_key()
f = Fernet(key)
ciphertext = f.encrypt(b"secret")
plaintext = f.decrypt(ciphertext)
以上示例展示了生产常用的列级加密落地方式;SQL Server 还支持更高合规的Always Encrypted与TDE/备份加密分层组合。
影响与优化要点
分层防护建议
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。