SQL CLR存储过程以查询活动目录

时间:2010-10-26 19:12:42

标签: sql-server-2005 clr

我需要从存储在Active Directory上的数据库中的用户那里获取一些信息,我有一个简单的功能来执行此操作:

using (DirectoryEntry de = new DirectoryEntry("LDAP://ANYGIVENDOMAIN"))
{
    using (DirectorySearcher adSearch = new DirectorySearcher(de))
    {
        adSearch.Filter = "(sAMAccountName=jdoe)";                  
        SearchResult adSearchResult = adSearch.FindOne();

        StringBuilder sb = new StringBuilder();
        sb.AppendLine(adSearchResult.Properties["displayname"][0].ToString());
        sb.AppendLine(adSearchResult.Properties["givenName"][0].ToString());
        sb.AppendLine(adSearchResult.Properties["objectSid"][0].ToString());
        sb.AppendLine(adSearchResult.Properties["description"][0].ToString());
        sb.AppendLine(adSearchResult.Properties["objectGUID"][0].ToString());
    }
}

从WinForm运行按我的意愿运行,但在SQL Server项目类型中,我无法将命名空间System.DirectoryServices添加到引用。

任何人都知道为什么?

此致

JE

1 个答案:

答案 0 :(得分:2)

请参阅:Supported .NET Framework Libraries

  

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

     

例如,   System.DirectoryServices命名空间是   不支持。你必须注册   System.DirectoryServices.dll程序集   尽可能使用UNSAFE权限   从你的代码中调用它。 UNSAFE   许可是必要的,因为   在课堂上   System.DirectoryServices名称空间做   不符合国家外汇管理局的要求   EXTERNAL_ACCESS。欲获得更多信息,   请参阅CLR Integration Programming Model RestrictionsCLR Integration Code Access Security