sqlserver数据库字段cek加密
时间: 2025-05-08 11:19:18 浏览: 17
### SQL Server 中的列加密密钥(CEK)加密方法
在SQL Server中实现字段级别的加密主要依赖于Always Encrypted技术。通过创建客户端主密钥(CMK)和列加密密钥(CEK),可以安全地保护敏感数据。
#### 创建客户端主密钥 (CMK)
为了管理多个CEK并提供额外的安全层,首先需要定义一个或几个CMK:
```sql
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword!';
GO
CREATE CERTIFICATE CMKCERT WITH SUBJECT = 'Certificate used to protect CEK';
GO
```
上述命令用于生成证书形式的CMK[^2]。
#### 定义列加密密钥 (CEK)
接着针对具体要加密的数据列建立相应的CEK,并将其关联到之前创建好的CMK上:
```sql
CREATE COLUMN MASTER KEY MyCMK
WITH
(
KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',
KEY_PATH = N'CurrentUser/My/CertificateThumbprint'
);
GO
CREATE COLUMN ENCRYPTION KEY MyCEK
WITH VALUES
(
COLUMN_MASTER_KEY = MyCMK,
ALGORITHM = 'RSA_OAEP',
ENCRYPTED_VALUE = 0x...
);
GO
```
注意这里的`ENCRYPTED_VALUE`应由应用程序端使用对应的公钥加密后得到的实际二进制串替换掉。
#### 应用CEK至目标表格中的特定字段
最后一步是在设计阶段指明哪些列为加密状态以及采用何种方式加密它们:
```sql
CREATE TABLE SensitiveData (
Id INT PRIMARY KEY,
SSN VARCHAR(11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH(
COLUMN_ENCRYPTION_KEY = MyCEK,
ENCRYPTION_TYPE = DETERMINISTIC,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),
CreditCardNumber CHAR(19)
ENCRYPTED WITH(
COLUMN_ENCRYPTION_KEY = MyCEK,
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256')
);
```
这里展示了两种不同类型的加密模式——确定性和随机化;前者适用于索引键值等场景而后者更适合存储信用卡号这类信息。
阅读全文
相关推荐


















