相关疑难解决方法(0)

如何获取特定用户的所有AD组?

我已经查过这篇文章了.但它没有回答我的问题.我想获取特定用户所属的所有活动目录组.

我写了以下代码.但我无法继续进行,因为我不知道如何提供过滤器以及如何访问属性.

class Program
{
    static void Main(string[] args)
    {
        DirectoryEntry de = new DirectoryEntry("LDAP://mydomain.com");
        DirectorySearcher searcher = new DirectorySearcher(de);
        searcher.Filter = "(&(ObjectClass=group))";
        searcher.PropertiesToLoad.Add("distinguishedName");
        searcher.PropertiesToLoad.Add("sAMAccountName");
        searcher.PropertiesToLoad.Add("name");
        searcher.PropertiesToLoad.Add("objectSid");
        SearchResultCollection results = searcher.FindAll();
        int i = 1;
        foreach (SearchResult res in results)
        {
            Console.WriteLine("Result" + Convert.ToString(i++));
            DisplayProperties("distinguishedName", res);
            DisplayProperties("sAMAccouontName", res);
            DisplayProperties("name", res);
            DisplayProperties("objectSid", res);
            Console.WriteLine();
        }

        Console.ReadKey();
    }

    private static void DisplayProperties(string property, SearchResult res)
    {
        Console.WriteLine("\t" + property);
        ResultPropertyValueCollection col = res.Properties[property];
        foreach (object o in col)
        {
            Console.WriteLine("\t\t" …
Run Code Online (Sandbox Code Playgroud)

.net c# directoryservices ldap active-directory

35
推荐指数
5
解决办法
9万
查看次数

C#:检查用户是否可以访问服务器而不尝试连接

下午好,

我目前面临一个问题,我有一个服务器名称列表,我需要验证一个Windows身份验证用户是否具有指定服务器名称的权限,而不尝试建立与指定服务器的连接,然后我提供服务器列表给他们.例如:

服务器:A,B,C,D

Joe拥有A和D的权限,但没有B和C的权限,所以Joe应该只在他的服务器列表中看到A和D.

我该如何处理这个问题?我应该从Active Directory中提取吗?我知道如何提取用户的身份,但是在哪里提取服务器信息并找出用户是否拥有权限是一个完全不同的故事.任何文档,代码示例,文章等都是有用的.

关于工作环境的注意事项

  1. 列表中的所有服务器都是运行SQL Server 2008 R2及更高版本的数据库服务器.
  2. 这是一个严格限制的政府环境.
  3. 我无法以任何方式修改Active Directory.
  4. 如果用户具有权限,我可以整天查询Active Directory和SQL Server.
  5. 未经授权使用第三方库和工具.

关于服务器列表的附注

此列表存储在数据库中,但我不认为这对权限方面有帮助.我已经使用以下SQL查询解决了针对各个数据库检查权限的问题:

SELECT name
FROM sys.databases
WHERE HAS_DBACCESS(name) = 1
ORDER BY name
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

-杰米

结论

基本上,我发现没有可能的方法来查询远程服务器上的AD组而不尝试建立连接,因此找到的所有样本的执行将使用IA标记用户帐户.对于其他有类似问题且不必担心IA会对用户施加压力的问题,我在下面列出了一些解决方案,您可以尝试满足您的需求(以下所有方法在正确实施时都能正常工作).

解决方案

  1. 查询活动目录中的服务器并从服务器检索组,如果失败9次,则异常消息将为"访问被拒绝".如果成功,则继续拉出当前用户的组并与从服务器提取的组进行比较.这篇文章的选定答案结合本文和/或这篇文章将为您提供此解决方案所需的位置.
  2. 如果您已通过模拟或其他方式(SQL Server Auth)访问服务器,则可以使用以下内容查看该成员是否分配了任何服务器角色:

    SELECT IS_SRVROLEMEMBER('public')

  3. 您还可以使用Microsoft.SqlServer.Management.Smo命名空间使用Microsoft.SqlServer.Smo程序集中提供的Login类.但是,您可能会或可能不会将Microsoft.SqlServer.SqlClrProvider命名空间从GAC移动到BIN.有关此内容的更多信息,请参阅此StackOverflow帖子,以及 Microsoft Connect线程,其中说明了以下内容:

客户端应用程序不应使用Program Files文件夹中的程序集,除非它们来自特定的SDK文件夹(例如"C:\ Program Files(x86)\ Microsoft SQL Server\130\SDK")

  1. 您甚至可以在try catch中执行基本连接测试,以查看连接是否有效.

    using (SqlConnection conn = new SqlConnection(connString)) { try { conn.Open(); conn.Close(); } catch …

c# sql-server

7
推荐指数
1
解决办法
1189
查看次数

在string []中返回用户所属的所有Active Directory组的列表

我需要返回用户所属的所有Active Directory组,但是在string []中,所以我可以使用Generic Principal中的结果.

我不确定是否要投出结果?请帮忙!

string[] roles = new string[] {  
helper.GetActiveDirectoryGroups(User.Identity.Name) };

GenericPrincipal principal = new GenericPrincipal(identity,roles);

 public string[] GetActiveDirectoryGroups(string userName)
    {
          //code here

    }
Run Code Online (Sandbox Code Playgroud)

c# active-directory c#-4.0 asp.net-mvc-3 asp.net-mvc-4

6
推荐指数
1
解决办法
1万
查看次数

获取当前登录的Windows用户?

可能重复:
如何在Active Directory中获取用户组?(c#,asp.net)

有没有办法使用System.DirectoryServices.AccountManagement命名空间获取当前登录的用户?我一直在使用以下内容:

    Dim wi As System.Security.Principal.WindowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent()

    Dim fullName As String = wi.Name.ToString

    Dim loggedOnUser = fullName.Substring(fullName.IndexOf("\") + 1)

    Console.WriteLine("The currently logged on user is {0}", loggedOnUser)
Run Code Online (Sandbox Code Playgroud)

但我想了解有关当前用户的更多信息,例如它们所属的组名称,并且想知道AccountManagement命名空间是否提供了此信息.

使用它只返回我无法理解的数字字符串:

For Each item As IdentityReference In wi.Groups
    Console.WriteLine(item.ToString())
Next
Run Code Online (Sandbox Code Playgroud)

.net windows winforms

4
推荐指数
1
解决办法
490
查看次数

使用 NTLM 身份验证获取用户和组详细信息

我想使用NTLM身份验证获取所有用户和组详细信息。

NTLM 是否使用Active Directory来存储所有用户名?NTLM 和Windows 身份验证是相同的身份验证方法吗?

如果是,那么在这种情况下的用途是什么?

c# ntlm

2
推荐指数
1
解决办法
2451
查看次数