Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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
.net 如何注册System.DirectoryServices以在SQL CLR用户函数中使用?_.net_Sql Server 2008_Active Directory_Sqlclr_Directoryservices - Fatal编程技术网

.net 如何注册System.DirectoryServices以在SQL CLR用户函数中使用?

.net 如何注册System.DirectoryServices以在SQL CLR用户函数中使用?,.net,sql-server-2008,active-directory,sqlclr,directoryservices,.net,Sql Server 2008,Active Directory,Sqlclr,Directoryservices,我正在移植一个旧的32位COM组件,该组件是用VB6编写的,用于读取和写入Active Directory服务器。新的解决方案将在C#中,并将使用sqlclr用户函数 我试图部署到SQL Server的程序集包含对System.DirectoryServices的引用。项目编译时没有任何错误,但由于以下错误,我无法将程序集部署到SQL Server: 错误:在SQL目录中找不到程序集“system.directoryservices,version=2.0.0,culture=neutral,p

我正在移植一个旧的3
2位COM
组件,该组件是用
VB6
编写的,用于读取和写入
Active Directory
服务器。新的解决方案将在
C#
中,并将使用
sqlclr
用户函数

我试图部署到
SQL Server
的程序集包含对
System.DirectoryServices
的引用。项目编译时没有任何错误,但由于以下错误,我无法将程序集部署到
SQL Server

错误:在SQL目录中找不到程序集“system.directoryservices,version=2.0.0,culture=neutral,publickeytoken=b03f5f7f11d50a3a”。

在SQL Server上注册
System.DirectoryServices
的正确步骤是什么

这有帮助吗:

老实说,我对SQL Server CLR的使用不太了解。因此,如果这有帮助的话,我将坚持下去学习自己

编辑#1

这是关于这个主题的另一个有趣的链接


我希望这有帮助

这篇文章有用吗

人们经常会问关于基地的设置 类库程序集,这些程序集可以 在SQLCLR中安全使用。通常 采用“我可以使用汇编吗?” SQLCLR过程中的System.XYZ.dll “代码”或“我为什么得到”程序集 “当我打开时,找不到System.XYZ.dll” 尝试将我自己的程序集编入目录 叫这个吗?是我听到的 最常提到的是 System.DirectoryServices.dll(活动 目录支持)或 System.Management.dll(WMI支持)或 System.Remoting.dll等。唯一 使用它们的方式是运行CREATE 你自己组装,哪一个 涉及使用权限集= 不安全。并将所有 依赖性。不适合虚弱的人 心

另外-SQL Server CLR不支持所有可想象的程序集-请在此处查找列表:

第二篇MSDN文章中有一条注释:

不受支持的库

仍然可以从托管存储过程调用不受支持的库, 触发器、用户定义函数、用户定义类型和用户定义聚合。 必须首先在SQL Server数据库中注册不受支持的库, 在代码中使用CREATEASSEMBLY语句之前。 应删除在服务器上注册并运行的任何不受支持的库 对安全性和可靠性进行审查和测试

例如,不支持System.DirectoryServices命名空间。 必须使用不安全的注册表注册System.DirectoryServices.dll程序集 权限,然后才能从代码中调用。不安全的权限 是必需的,因为System.DirectoryServices命名空间中的类 不符合安全或外部访问的要求。更多信息 有关详细信息,请参阅CLR集成编程模型限制和 CLR集成代码访问安全性


根据其他答案提供的信息,我找到了解决方案。以下是我提出的步骤,以供将来参考:

CREATE ASSEMBLY [System.DirectoryServices]
FROM 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.DirectoryServices.dll'
WITH PERMISSION_SET = UNSAFE
GO
第一次运行上面的语句时,出现以下错误:

为程序集“System.DirectoryServices”创建程序集失败,因为未授权程序集“System.DirectoryServices”的权限\u SET=UNSAFE。当以下任一项为true时,将授权该程序集:数据库所有者(DBO)具有不安全的程序集权限,并且数据库在上具有Trustly database属性;或者使用证书或非对称密钥对程序集进行签名,该证书或非对称密钥具有具有不安全程序集权限的相应登录名

为了让CREATE ASSEMBLY语句无误地执行,我必须首先打开TRUSTORY,如下所示:

ALTER DATABASE DatabaseName SET TRUSTWORTHY ON
GO
一旦开启Trustly,命令将无误执行,但它确实发出了听起来可怕的警告:

警告:Microsoft.NET Framework程序集“system.directoryservices,version=2.0.0.0,culture=neutral,publickeytoken=b03f5f7f11d50a3a,processorarchitecture=msil”。您正在注册的程序集未在SQL Server托管环境中进行全面测试,因此不受支持。将来,如果您升级或服务此程序集或.NET Framework,您的CLR集成例程可能会停止工作。有关详细信息,请参阅SQL Server联机丛书


在SQL Server中正确注册System.DirectoryServices后,我现在可以部署/注册依赖的自定义SQL CLR程序集,而不会出现任何问题。

要补充一点,我花了一天时间尝试使用非对称密钥签名的DLL注册程序集,但由于错误而失败

…未获得权限\u SET=safe的授权。当

后来才发现SQL server不喜欢中间有空格的路径

CREATE ASYMMETRIC KEY AsyKeyName FROM executable FILE = 'C:\Program Files\...'