CLR 函数 publish.sql 文件

CLR Function publish.sql file

我有一个 CLR 函数,我想用 permission_set = unsafe

部署

程序集是用 public/private 密钥文件签名的,我创建了一个 assymtric key,使用那个 asymmetric key 创建了一个 login 并给了登录权限对于 unsafe 个集会

如果我想部署程序集,我可以只执行在 ./bin/debug 下找到的 .publish.sql 用于部署 CLR 程序集 .dll 吗?

提前致谢

如果您已经设置了必要的东西,那么我很好奇您为什么不尝试执行该文件以亲自查看,因为这会回答这个问题,对吗? ;-) 但是,是的,为了创建(和使用)一个标有 PERMISSION_SET = UNSAFE.

的程序集,您只需要执行这三个步骤

请记住,"publish" 脚本始终是增量的。因此,您不应将其视为适用于所有情况的部署脚本。如果您已经完成构建并且没有进行任何更改,那么它不会重新部署程序集,除非有一个选项可以始终删除重新创建对象(我知道有数据库但不记得程序集). "create" 脚本,如果您选中了生成它的选项,它总是会丢弃所有内容并重新创建。

为了以防万一,默认情况下,SSDT 生成的发布脚本不会混淆不属于项目的服务器级对象("part of the project" 意味着您已经导入了master DB 进入解决方案)。因此,完整的 Create 脚本不会(或至少不应)从 [master] 中删除登录或非对称密钥。但是,如果需要,可以选择 "Do not drop Logins" and/or "Do not drop Asymmetric Keys".

AND,因为这个问题涉及旧版本的 SQL Server:SQL Server 2017,刚刚发布,稍微改变了部署程序集的规则。问题中描述的方法仍然有效,因为它首先创建了非对称密钥,但现在即使 SAFE 程序集也需要这样做。我(详细地)描述了两个处理这个问题的选项,a)在所有版本中工作回到 SQL Server 2012,和 b)以完全自动化的方式使用 Visual Studio 和 SSDT 的框架:

第一个 link(针对解决方案 1)是对我为 SQL Server Central 撰写的以下文章中详述的方法的改编,它确实适用于 SQL服务器 2005 - SQL 服务器 2016:

Stairway to SQLCLR Level 7: Development and Security