T-SQL C# CLR 执行权限在重新部署时在程序集上丢失

T-SQL C# CLR Execute permissions being lost on assemblies when are redeployed

我继承了一个 VS2015 .NET C# 项目,该项目将 C# 程序集作为 CLR 存储过程部署到 SQL Server 2016。它已经无缝运行了很多年。

但是最近我注意到,当我重新部署(a.k.a“发布数据库”)时,其中一个程序集似乎失去了其中一位用户的 EXECUTE 权限。

有没有办法让项目在重新部署后重新应用 EXECUTE 权限?该脚本必须知道我正在将更新的 CLR 部署到哪个 SQL 服务器实例和数据库。谢谢

永远不会向用户授予对程序集的执行权限。我怀疑您的意思是对引用此程序集中代码的一个(或多个)SQLCLR 存储过程执行权限。您可以相当轻松地将 post-release T-SQL 脚本添加到您的 Visual Studio 项目中,该项目将包含在发布脚本中(由 SSDT 通过 VS)。在此 T-SQL 脚本中,您只需添加 GRANT 语句。而且,如果它只在一个特定的数据库/实例中有意义,那么您可以将该 GRANT 语句包装在一个 IF 块中,该块检查当前实例 and/or 数据库名称。

在 VS 2015 中添加 post-release 脚本的步骤:

  1. Select 解决方案资源管理器中的项目
  2. 转到“项目”菜单
  3. Select“添加新项目...”
  4. Select “SQL 服务器” -> “用户脚本”
  5. Select "Post-Deployment 脚本"
  6. 在“名称:”字段中键入脚本的名称
  7. 点击“添加”按钮
  8. 编辑新的 SQL 脚本以添加 GRANT 语句

该脚本的内容将被添加到任何由 VS / SSDT 生成的 deployment / publish 脚本的末尾,因此将在您执行这些脚本的每个数据库中执行。