![在 SQL Server 中创建非对称密钥以访问 DLL 失败](https://linux22.com/image/669466/%E5%9C%A8%20SQL%20Server%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%AF%86%E9%92%A5%E4%BB%A5%E8%AE%BF%E9%97%AE%20DLL%20%E5%A4%B1%E8%B4%A5.png)
我需要从 SQL 触发器访问 DLL (C#) 以满足我们的一个要求。我已经编译了 DLL,可以使用“创建程序集”将其加载到 SQL 服务器空间中,然后为其创建触发器。
TRUSTWORTHY
我已通过设置标志将数据库设置为值得信赖ON
。
ALTER DATABASE %DBName% SET TRUSTWORTHY ON;
但在意识到这种做法不安全后,我用密钥(.snk
文件)对 DLL 进行了签名,并尝试创建非对称密钥,然后根据密钥创建登录名,以便授予该登录名的外部访问权限。如果不将 DB 设置为可信,或者除非我创建可以使用密钥访问 DLL 的用户,否则我无法使用 DLL,因为它执行文件访问。因此,必须使用外部访问权限加载 DLL。但是在执行以下查询以创建非对称密钥时,我收到一条错误,该错误遵循以下查询:
USE [master];
GO
CREATE ASYMMETRIC KEY [ClrPermissionsKey]
AUTHORIZATION [dbo]
FROM EXECUTABLE FILE = 'D:\Trigger\TriggerManager.dll'
“消息 15208,级别 16,状态 1,第 2 行
证书、非对称密钥或私钥文件不存在或格式无效。”
.snk 文件与 DLL 位于同一路径。在此请求您的帮助。
如果这不是正确的做法,请提出建议。