我已经查过这篇文章了.但它没有回答我的问题.我想获取特定用户所属的所有活动目录组.
我写了以下代码.但我无法继续进行,因为我不知道如何提供过滤器以及如何访问属性.
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) 下午好,
我目前面临一个问题,我有一个服务器名称列表,我需要验证一个Windows身份验证用户是否具有指定服务器名称的权限,而不尝试建立与指定服务器的连接,然后我提供服务器列表给他们.例如:
服务器:A,B,C,D
Joe拥有A和D的权限,但没有B和C的权限,所以Joe应该只在他的服务器列表中看到A和D.
我该如何处理这个问题?我应该从Active Directory中提取吗?我知道如何提取用户的身份,但是在哪里提取服务器信息并找出用户是否拥有权限是一个完全不同的故事.任何文档,代码示例,文章等都是有用的.
关于工作环境的注意事项
关于服务器列表的附注
此列表存储在数据库中,但我不认为这对权限方面有帮助.我已经使用以下SQL查询解决了针对各个数据库检查权限的问题:
SELECT name
FROM sys.databases
WHERE HAS_DBACCESS(name) = 1
ORDER BY name
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
-杰米
结论
基本上,我发现没有可能的方法来查询远程服务器上的AD组而不尝试建立连接,因此找到的所有样本的执行将使用IA标记用户帐户.对于其他有类似问题且不必担心IA会对用户施加压力的问题,我在下面列出了一些解决方案,您可以尝试满足您的需求(以下所有方法在正确实施时都能正常工作).
解决方案
如果您已通过模拟或其他方式(SQL Server Auth)访问服务器,则可以使用以下内容查看该成员是否分配了任何服务器角色:
SELECT IS_SRVROLEMEMBER('public')
您还可以使用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")
您甚至可以在try catch中执行基本连接测试,以查看连接是否有效.
using (SqlConnection conn = new SqlConnection(connString)) {
try {
conn.Open();
conn.Close();
} catch …
我需要返回用户所属的所有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) 有没有办法使用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) 我想使用NTLM身份验证获取所有用户和组详细信息。
NTLM 是否使用Active Directory来存储所有用户名?NTLM 和Windows 身份验证是相同的身份验证方法吗?
如果是,那么在这种情况下域的用途是什么?