C# 在Visual Studio 2012 Sql Server项目中创建非对称密钥

C# 在Visual Studio 2012 Sql Server项目中创建非对称密钥,c#,sql-server,visual-studio-2012,sqlclr,C#,Sql Server,Visual Studio 2012,Sqlclr,我正在开发一个包含四个CLR存储过程的Visual Studio 2012 SQL Server项目。我将在SQLServer2012服务器上使用它 在该项目之前,我有另一个项目,仅使用CLR存储过程,我使用此sql将其添加到我的数据库中: -- ##################################################################### -- Add SQL CLR Procedures. -- #######################

我正在开发一个包含四个CLR存储过程的Visual Studio 2012 SQL Server项目。我将在SQLServer2012服务器上使用它

在该项目之前,我有另一个项目,仅使用CLR存储过程,我使用此sql将其添加到我的数据库中:

 -- #####################################################################
 -- Add SQL CLR Procedures.
 -- #####################################################################

Use master
go

-- Configure CLR execution on SQL Server.
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

-- For stored procedure dll...
CREATE ASYMMETRIC KEY CodeServerAK FROM EXECUTABLE FILE = 'D:\MyPath\bin\Release\CodeServerDB.dll'
CREATE LOGIN SQLCLRCodeServerSP FROM ASYMMETRIC KEY CodeServerAK
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRCodeServerSP 
go

USE MyDB
GO

-- Create users from assemblies' login name.
CREATE USER SQLCLRCodeServerSPUser FOR LOGIN SQLCLRCodeServerSP
GO

USE MyDB
GO

CREATE ASSEMBLY CodeServerDB FROM  'D:\MyPath\bin\Release\CodeServerDB.dll'
WITH PERMISSION_SET=EXTERNAL_ACCESS
GO
但是现在我有一个问题:我不知道如何创建非对称密钥
CodeServerAK
,因为现在我没有dll的路径

如何创建非对称密钥

我想我不需要使用以下sql:

CREATE ASSEMBLY CodeServerDB FROM  'D:\MyPath\bin\Release\CodeServerDB.dll'
    WITH PERMISSION_SET=EXTERNAL_ACCESS
    GO
我已经在SQL Server上发布了VS项目,程序集就在那里


顺便说一句,程序集是经过签名的。

作为一个不雅观的解决方案,我有一个预构建步骤,它将密钥文件从相对于项目的路径复制到一个网络共享,该网络共享可由生成计算机和目标sql server访问,例如,copy/Y“$(ProjectDir)bin\Release\CodeServerDB.dll”“\myserver\share\path”

然后,您可以更新CREATE asymetric KEY命令以引用网络共享

我还没有发现如何让VisualStudio自动构建和部署非对称密钥

旁注:您可以让Visual Studio为您生成和部署程序集,而无需参考二进制dll-检查项目设置SQLCLR选项卡上的生成DDL选项,CREATE assembly语句是使用编码的二进制代码生成的

CREATE ASSEMBLY [My.SQLServer.SQLCLR]
    AUTHORIZATION [dbo]
    FROM 0x4D5A900003{...}0000000000000
    WITH PERMISSION_SET = EXTERNAL_ACCESS;