为什么我不能在 SQL Server 中为 dll 生成非对称密钥?

随机的

我在 VS 中有一个数据库项目,我试图从 dll 在 SQL Server 中生成一个非对称密钥。在 SSMS 中,我尝试运行以下命令:

CREATE ASYMMETRIC KEY MyNewKey 
FROM EXECUTABLE FILE = N'C:\{path to dll}\MyDBProj.dll'

我得到的错误是“证书、非对称密钥或私钥文件无效或不存在;或者您没有权限。”

有问题的 dll 是使用 SQLCLR 权限级别 = SAFE 构建的

我的假设是它与文件权限有关,但我不知道我需要在文件上允许什么安全权限才能实现这一点。我被告知我应该授予 NETWORK SERVICE 帐户读取权限,我做到了。

这是在具有混合模式身份验证的本地数据库上。我已经以 Windows 用户和 sa 帐户的身份尝试过。

所罗门·鲁茨基

鉴于您使用的是 SQL Server Express LocalDB(它作为您的登录名运行,因此没有权限问题),唯一应该导致此类错误的事情是您没有实际签署程序集。这可以通过项目属性的 SQLCLR 选项卡中的“签名...”按钮在 Visual Studio 中完成。

签署程序集(无论是通过给它一个强名称还是添加证书)将用于签署它的任何公钥放在程序集中。CREATE ASYMMETRIC KEY语句将从通过强命名放置在那里的程序集中提取公钥。这与获取用于签署程序集的证书的公钥不同,因为它们是单独存储的。

当然,如果“本地数据库”是指它仅在您的开发工作站上运行,而不是专门的 SQL Server Express LocalDB,那么我猜它会是 SQL Server Express?如果您以自己的身份登录 SQL Server(您说您以 Windows 用户身份尝试过)并且您是 . sysadmin,那么仍然不应该有任何文件系统权限问题,也不应该有任何创建非对称密钥的问题。


一般的

有关一般使用 SQLCLR 的更多信息,请参阅我在 SQL Server Central: Stairway to SQLCLR上撰写的关于此主题的系列文章

关于 SQL Server 2017

SQL Server 2017 引入了默认启用的新安全功能(“CLR 严格安全”,高级选项),并要求所有程序集,即使标记为 的程序集SAFE,都使用非对称密钥(即强名称)或证书进行签名,并且有一个具有UNSAFE ASSEMBLY权限的登录名(基于用于签署程序集的任何内容)有关如何使用或不使用 Visual Studio / SSDT 进行这项工作的详细信息,请参阅我的以下两篇文章:

请避免使用新的可信程序集“功能”,因为它的缺陷多于好处,更不用说它一开始就完全没有必要,因为现有功能已经处理了“可信程序集”旨在解决的情况。有关详细信息以及处理现有未签名程序集的正确方法的演示,请参阅:SQLCLR 与 SQL Server 2017,第 4 部分:“可信程序集”——失望

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我不能在NSKeyedArchiver中编码NSValue?

来自分类Dev

为什么不能在SQL Server上查询OFFSET / FETCH查询?

来自分类Dev

为什么非对称密钥更安全?

来自分类Dev

为什么我不能在表中插入数据?

来自分类Dev

为什么不能在SQL Server的CASE语句列上使用filter我的WHERE子句?

来自分类Dev

如何检查谁有权访问SQL Server中的对称密钥

来自分类Dev

为什么我不能在wxPython中销毁我的StaticText?

来自分类Dev

为什么我不能在Python中创建这样的对象?

来自分类Dev

为什么我不能在Integer类中覆盖self?

来自分类Dev

为什么我不能在熊猫函数中应用shift?

来自分类Dev

为什么我不能在RStudio中安装“预测”包?

来自分类Dev

是在我的应用程序中手动生成guid还是让sql server / azure sql为我生成它更好?

来自分类Dev

为什么我不能在Python中更改类的属性

来自分类Dev

是否可以在SQL Server 2014中为.NET框架程序集创建非对称密钥?

来自分类Dev

为什么我不能在界面中访问此字段?

来自分类Dev

为什么我不能在异步方法中调试代码?

来自分类Dev

为什么我不能在Typescript中扩展“ any”?

来自分类Dev

为什么我不能在Windows 7 Professional 64位SP1上安装SQL Server Express 2016?

来自分类Dev

SQL Server证书和对称密钥

来自分类Dev

使用加密模块从node.js中的Curve25519(或X25519)非对称密钥对生成共享秘密密钥

来自分类Dev

为什么%通配符不能在SQL Server中作为变量的内容工作?

来自分类Dev

为什么我的sql命令在ACCESS中显示正确的结果时不能在asp上运行?

来自分类Dev

为什么我不能在Windows Server 2008中使用system()从服务启动批处理文件?

来自分类Dev

SQL Server 2008-为什么我不能在select count(*)中对查询使用WHERE

来自分类Dev

如何在Java中以非对称加密生成密钥对?

来自分类Dev

为什么我不能在Windows 7 Professional 64位SP1上安装SQL Server Express 2016?

来自分类Dev

在 SQL Server 2014 中执行批量插入和解密对称密钥

来自分类Dev

为什么我不能在 Flatlist 中显示我的项目?

来自分类Dev

为什么我的查询不能在我的代码中执行,而它在普通 sql 中执行得很好?

Related 相关文章

  1. 1

    为什么我不能在NSKeyedArchiver中编码NSValue?

  2. 2

    为什么不能在SQL Server上查询OFFSET / FETCH查询?

  3. 3

    为什么非对称密钥更安全?

  4. 4

    为什么我不能在表中插入数据?

  5. 5

    为什么不能在SQL Server的CASE语句列上使用filter我的WHERE子句?

  6. 6

    如何检查谁有权访问SQL Server中的对称密钥

  7. 7

    为什么我不能在wxPython中销毁我的StaticText?

  8. 8

    为什么我不能在Python中创建这样的对象?

  9. 9

    为什么我不能在Integer类中覆盖self?

  10. 10

    为什么我不能在熊猫函数中应用shift?

  11. 11

    为什么我不能在RStudio中安装“预测”包?

  12. 12

    是在我的应用程序中手动生成guid还是让sql server / azure sql为我生成它更好?

  13. 13

    为什么我不能在Python中更改类的属性

  14. 14

    是否可以在SQL Server 2014中为.NET框架程序集创建非对称密钥?

  15. 15

    为什么我不能在界面中访问此字段?

  16. 16

    为什么我不能在异步方法中调试代码?

  17. 17

    为什么我不能在Typescript中扩展“ any”?

  18. 18

    为什么我不能在Windows 7 Professional 64位SP1上安装SQL Server Express 2016?

  19. 19

    SQL Server证书和对称密钥

  20. 20

    使用加密模块从node.js中的Curve25519(或X25519)非对称密钥对生成共享秘密密钥

  21. 21

    为什么%通配符不能在SQL Server中作为变量的内容工作?

  22. 22

    为什么我的sql命令在ACCESS中显示正确的结果时不能在asp上运行?

  23. 23

    为什么我不能在Windows Server 2008中使用system()从服务启动批处理文件?

  24. 24

    SQL Server 2008-为什么我不能在select count(*)中对查询使用WHERE

  25. 25

    如何在Java中以非对称加密生成密钥对?

  26. 26

    为什么我不能在Windows 7 Professional 64位SP1上安装SQL Server Express 2016?

  27. 27

    在 SQL Server 2014 中执行批量插入和解密对称密钥

  28. 28

    为什么我不能在 Flatlist 中显示我的项目?

  29. 29

    为什么我的查询不能在我的代码中执行,而它在普通 sql 中执行得很好?

热门标签

归档