Muf*_*lix 5 deployment sql-clr ssdt sql-server-2017
我在 SSDT 中有 CLR 程序集,并且部署它必须是可信的。据我所知,有 4 个选项如何做到这一点
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
ALTER DATABASE SourceDatabase SET TRUSTWORTHY ON;
Run Code Online (Sandbox Code Playgroud)
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'clr strict security', 0;
RECONFIGURE;
Run Code Online (Sandbox Code Playgroud)
Seems complicated and I was not able to manage that yet. I will appreciate the instructions, because the workflow is not clear here.
Run Code Online (Sandbox Code Playgroud)
sp_add_trusted_assemblyEXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
declare @assembly varbinary(max) = 0x4D5A90000300000004000000FFFF0000... -- I have to manually copy that from the failed SQL publish file.
declare @hash varbinary(64) = HASHBYTES('SHA2_512', @assembly);
EXEC sys.sp_add_trusted_assembly @hash, N'Foo Assembly';
Run Code Online (Sandbox Code Playgroud)
在第四个选项中,我必须手动将程序集注册为受信任,只有在此之后我才能发布程序集。有可能以某种方式自动化这个过程吗?
我正在考虑创建pre-deployment script可以运行第四个选项代码的程序,但我不知道如何从程序集文件中填充 @ assembly 变量.dll。
或者,如果可以将程序集部署为不受信任,我可以使用以下代码使其在服务器上受信任 ( post-deployment script)
Seems complicated and I was not able to manage that yet. I will appreciate the instructions, because the workflow is not clear here.
Run Code Online (Sandbox Code Playgroud)
有什么想法或者你的方法是什么?
我更喜欢选项 3:使用非对称密钥(即强名称)/证书的内置/“传统”机制。不幸的是,SQL Server 2017 引入了“CLR 严格安全性” ,并且没有内置方法来克服这个特定问题(提前设置安全性)。因此,我想出了一种可能的方法,可以使用 Visual Studio / SSDT(或不使用),一种用于非对称密钥(因为这是 Visual Studio 默认情况下的工作方式,尽管比下一个选项稍微复杂一些),一种用于证书(需要额外的 EXE 来处理证书,因为 Visual Studio / SSDT 只处理强命名,但总体过程更简单):
\nSQLCLR 与 SQL Server 2017,第 2 部分:\xe2\x80\x9cCLR 严格安全\xe2\x80\x9d \xe2\x80\x93 解决方案 1
\nSQLCLR 与 SQL Server 2017,第 3 部分:\xe2\x80\x9cCLR 严格安全\xe2\x80\x9d \xe2\x80\x93 解决方案 2
\n“解决方案 1”(即使用非对称密钥)的基本思想是使用与您尝试安装的 DLL 相同的强名称来签署一个空程序集(这只是因为我们仍然无法通过十六进制/文字创建非对称密钥VARBINARY!!!)。这将被上传,master以便我们可以在将真实程序集上传到一个或多个用户数据库之前设置安全性。仅此一点在 SQL Server 2017 和考虑不周的“CLR 严格安全性”之前就有效。有了新的安全约束,我们无法再上传未签名的SAFE程序集(即使用非对称密钥签名的空程序集),因此现在我们还需要使用证书对空程序集进行签名(因为这可以通过十六字节创建,之前上传程序集)。这允许加载空程序集,以便我们可以提取非对称密钥。是的,很复杂,但不幸的是,在可以从十六字节创建非对称密钥之前,这就是我们所处的位置。
“解决方案 2”跳过空程序集,仅使用证书对预期的自定义程序集进行签名。在这种情况下,可以直接加载证书[master],然后导入程序集。但是,由于 Visual Studio / SSDT 不使用证书进行签名,因此您需要手动更新.sqlproj文件以注入一个步骤来处理此问题。
| 归档时间: |
|
| 查看次数: |
7764 次 |
| 最近记录: |