Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用创建的程序集会导致SQL Server永久挂起_Sql Server_Dll_Clr_Sqlclr - Fatal编程技术网

Sql server 使用创建的程序集会导致SQL Server永久挂起

Sql server 使用创建的程序集会导致SQL Server永久挂起,sql-server,dll,clr,sqlclr,Sql Server,Dll,Clr,Sqlclr,这一点有点难以解释,特别是对于非英语母语人士: 我想用一些基于椭圆曲线的数字签名函数的C#实现。我编写了一个小型C#包装器类,它具有以下方法: public static void generateKeyPair(out byte[] private_key, out byte[] public_key) public static void SignData(byte[] data, byte[] private_key, out byte[] signature) public stat

这一点有点难以解释,特别是对于非英语母语人士:

我想用一些基于椭圆曲线的数字签名函数的C#实现。我编写了一个小型C#包装器类,它具有以下方法:

public static void generateKeyPair(out byte[] private_key, out byte[] public_key)

public static void SignData(byte[] data, byte[] private_key, out byte[] signature)

public static void VerifyData(byte[] signature, byte[] data, byte[] public_key, out bool ok)
它们都可以访问实际的BouncyCastle库BouncyCastle.Crypto.dll。然后我 创建了一个“Visual Studio强名称密钥文件”,并使用原始的BouncyCastle DLL作为资源和刚刚创建的密钥文件编译了包装类文件

在SQL Server中,我执行了以下操作:

USE ACS  
EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE WITH OVERRIDE;  
EXEC sp_configure 'xp_cmdshell', 1  
EXEC sp_configure 'CLR enabled', 1;  
RECONFIGURE WITH OVERRIDE;  
ALTER DATABASE ACS SET TRUSTWORTHY OFF  

USE master  
CREATE ASYMMETRIC KEY CLR_Key_Wrapper FROM EXECUTABLE FILE = 'C:\Wrapper.dll'  
CREATE ASYMMETRIC KEY CLR_Key_BouncyCastle FROM EXECUTABLE FILE = 'C:\BouncyCastle.Crypto.dll'  
CREATE LOGIN CLR_Login_Wrapper FROM ASYMMETRIC KEY CLR_Key_Wrapper  
CREATE LOGIN CLR_Login_BouncyCastle FROM ASYMMETRIC KEY CLR_Key_BouncyCastle  
GRANT UNSAFE ASSEMBLY TO CLR_Login_Wrapper  
GRANT UNSAFE ASSEMBLY TO CLR_Login_BouncyCastle  

USE ACS  
CREATE ASSEMBLY CLR FROM 'C:\Wrapper.dll' WITH PERMISSION_SET = UNSAFE  
GO

CREATE PROCEDURE Generate_Keypair  
(  
  @BSI_or_NIST  BIT,  
  @Private_Key  VARBINARY(64)  OUTPUT,  
  @Public_Key  VARBINARY(128)  OUTPUT  
)  
AS EXTERNAL NAME CLR.Wrapper.generateKeyPair  
GO  

CREATE PROCEDURE Sign_Data  
(  
  @BSI_or_NIST  BIT,  
  @Data  VARBINARY(8000),  
  @Private_Key  VARBINARY(64),  
  @Signature  VARBINARY(128)  OUTPUT  
)  
AS EXTERNAL NAME CLR.Wrapper.SignData  
GO  

CREATE PROCEDURE Verify_Data  
(  
  @BSI_or_NIST  BIT,  
  @Signature  VARBINARY(128),  
  @Data  VARBINARY(8000),  
  @Public_Key  VARBINARY(128),  
  @OK  BIT  OUTPUT  
)  
AS EXTERNAL NAME CLR.Wrapper.VerifyData  
现在,在TSQL批处理中或通过.Net客户端应用程序的过程调用,使用这三个过程生成\u密钥对、签名\u数据和验证\u数据有时可以正常工作,但有时会导致MSSQLSERVER服务在使用100%CPU的情况下陷入无休止的循环,特别是当我尝试在不同于我自己的机器上安装所有这些代码时,我在我自己的机器上开发了上面的代码(尽管如此,在我自己的机器上也会发生,但不太常见)

唯一可以做的事情是取消正在执行的查询并删除程序集,当CPU 100%使用时,这需要相当长的时间

谁能告诉我我做错了什么?提前感谢,

Jan

您的存储过程声明了一个C#方法所缺少的位参数


要查明程序集是否导致100%的CPU使用率,您应该在代码执行时记录日志,并检查生成的日志文件(log4net,BareTail)。

您的存储过程声明了一个C方法缺少的位参数

要查明程序集是否导致100%的CPU使用率,应该在代码执行时记录日志,并检查生成的日志文件(log4net,BareTail)