【发布时间】:2017-07-20 23:30:03
【问题描述】:
我的问题如下:我需要一个 clr udf(在 C# 中)来使用给定的 ad-usr 查询广告组成员身份
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.DirectoryServices.AccountManagement;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlInt32 check_user_is_part_of_ad_grp(SqlString ad_usr, SqlString ad_grp)
{
bool bMemberOf = false;
// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find the group in question
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, ad_grp.ToString());
UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, ad_usr.ToString());
if (group != null && usr != null)
{
bMemberOf = usr.IsMemberOf(group);
}
// Put your code here
return new SqlInt32 (bMemberOf ? 1 : 0);
}
}
如果我将 CLR 发布到我的 SQL Server 2008 (.net 3.5),那么我按如下方式运行 udf:
select dbo.check_user_is_part_of_ad_grp('user', 'group')
我得到一个错误:
消息 6522,第 16 级,状态 1,第 1 行
在执行用户定义的例程或聚合“check_user_is_part_of_ad_grp”期间发生 .NET Framework 错误:
System.Security.SecurityException:请求“System.DirectoryServices.DirectoryServicesPermission,System.DirectoryServices,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”类型的权限失败。
System.Security.SecurityException:
在 UserDefinedFunctions.check_user_is_part_of_ad_grp(SqlString ad_usr, SqlString ad_grp)
我将项目的目标框架设置为3.5,权限级别设置为EXTERNAL_ACCESS。还有项目参考(System.DirectoryServices、System.DirectoryServices.AccountManamgement、System.DirectoryServices.Protocols)到EXTERNAL
感谢您的帮助
【问题讨论】:
标签: c# sql-server-2008 active-directory sqlclr udf