You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server使用EKM提供的对称密钥调用EncryptByKey返回NULL的排查

问题描述

在SQL Server中使用外部密钥提供商(EKM)存储对称密钥,已成功在master库创建密钥:

USE master ;
GO

CREATE SYMMETRIC KEY symmetric_key
FROM PROVIDER EKM_Prov
WITH ALGORITHM = AES_256,
PROVIDER_KEY_NAME = 'symmetric_key' ;
GO

可在EKM提供商及sys.symmetric_keys表中查看到该密钥,但执行加密语句时始终返回NULL:

SELECT EncryptByKey(Key_GUID('symmetric_key'), 'Highest') AS CipherText;

已确认EKM托管的对称密钥无需执行OPEN SYMMETRIC KEY操作,询问遗漏的配置项,是否需要将密钥绑定到登录名及操作方法。

解决方案

以下是几个可能的原因及对应解决方法:

1. 数据库上下文不匹配

你在master库创建了对称密钥,但如果加密语句是在其他数据库上下文执行的,Key_GUID('symmetric_key')会无法找到密钥并返回NULL,进而导致EncryptByKey返回NULL。

解决方法:

  • 切换到master库执行加密语句:
USE master;
GO
SELECT EncryptByKey(Key_GUID('symmetric_key'), 'Highest') AS CipherText;
  • 或者在Key_GUID中指定密钥的完整数据库路径:
SELECT EncryptByKey(Key_GUID('master.symmetric_key'), 'Highest') AS CipherText;

2. 登录账号缺少密钥权限

默认情况下,只有密钥的创建者和sysadmin角色成员拥有该EKM对称密钥的访问权限。如果当前执行加密的登录账号没有足够权限,EncryptByKey会返回NULL。

解决方法:
给目标登录账号授予密钥的加密权限(或更高权限),执行以下语句(替换[YourLogin]为实际登录名):

USE master;
GO
-- 授予最小必要的加密权限
GRANT ENCRYPT ON SYMMETRIC KEY::symmetric_key TO [YourLogin];
-- 若需管理密钥,可授予完整控制权限
-- GRANT CONTROL ON SYMMETRIC KEY::symmetric_key TO [YourLogin];

3. EKM提供商端配置问题

即使SQL Server中已创建密钥条目,若EKM提供商未授权SQL Server的服务账号访问该密钥,也会导致加密失败返回NULL。

解决方法:
检查EKM提供商的配置:

  • 确认SQL Server服务使用的账号(域账号或本地服务账号)在EKM系统中拥有该密钥的读取/加密权限;
  • 验证EKM提供商与SQL Server的连接状态正常,密钥在EKM端处于可用状态。

内容的提问来源于stack exchange,提问作者Wolfgang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:30:10