温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

数据库Column列如何加密

发布时间:2026-10-08 15:01:32 来源:亿速云 阅读:90 作者:小樊 栏目:数据库

在数据库中“对 Column(列)加密”通常有几种做法,取决于你用的数据库类型、安全需求和性能要求。下面我按常见场景系统讲一下。


一、应用层加密(最通用、最推荐)

原理:在写入数据库前,在应用代码里加密;读取后再解密。

常见方式

  • 对称加密(AES)
  • 非对称加密(RSA,性能差,少用)
  • 国密(SM4 / SM2,国内合规常用)

示例(Java + AES)

// 加密
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] encrypted = cipher.doFinal(plainText.getBytes());

// 存储 encrypted(BLOB / VARCHAR)

✅ 优点

  • 数据库不知道明文
  • 不依赖数据库能力
  • 合规友好(等保、密评)

❌ 缺点

  • 无法在 SQL 中直接查询明文
  • 排序 / 索引困难

二、数据库自带列加密(透明加密 TDE / 列加密)

1️⃣ MySQL

(1)MySQL 8.0+ 静态数据加密(表空间)

ALTER TABLE user ENCRYPTION='Y';

⚠️ 这是对“整个表”加密,不是单列。

(2)应用层函数(不推荐)

SELECT AES_ENCRYPT('123456', 'key');

❌ 密钥容易泄露,不安全和不规范。


2️⃣ PostgreSQL

使用 pgcrypto

CREATE EXTENSION pgcrypto;

INSERT INTO user (phone)
VALUES (pgp_sym_encrypt('13800000000', 'key'));

SELECT pgp_sym_decrypt(phone, 'key') FROM user;

✅ 优点:数据库内加密
❌ 缺点:密钥管理麻烦


3️⃣ SQL Server

Always Encrypted(最强列级加密)

CREATE COLUMN MASTER KEY ...
CREATE COLUMN ENCRYPTION KEY ...

CREATE TABLE User (
  Phone VARCHAR(20)
  ENCRYPTED WITH (
    ENCRYPTION_TYPE = Deterministic,
    ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',
    COLUMN_ENCRYPTION_KEY = CEK1
  )
);

✅ 数据库也看不到明文
✅ 支持部分查询(Deterministic)


4️⃣ Oracle

TDE 列加密

ALTER TABLE user
MODIFY (phone ENCRYPT USING 'AES256');

三、磁盘 / 表空间级加密(不算“列加密”)

⚠️ 只防“硬盘被盗”,不防 DBA 看数据


四、如何选?

场景 推荐方案
高安全、合规 应用层加密(SM4/AES)
SQL Server Always Encrypted
PostgreSQL pgcrypto
只是防磁盘丢失 TDE
手机号 / 身份证 加密 + 脱敏

五、重要注意点

  1. 密钥不能放数据库
  2. 加密列不能建普通索引(可哈希索引)
  3. 查询用「哈希 + 加密」组合
  4. 合规场景优先国密

如果你告诉我:

  • 用的什么数据库(MySQL / PG / Oracle / SQL Server)
  • 加密什么字段(密码 / 手机号 / 身份证)
  • 是否要支持查询

我可以直接给你可落地的 SQL + 代码方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手