java - What is the efficient way of get members for specific user in LDAP Query?
问题描述
In Active Directory, I have to use an LDAP query for getting members of a specific user. I am using the LDAP query format is,
userSearchFilter = (&(sAMAccountType=805306368)(sAMAccountName=user));
userSearchBase = user + ",DC=test,DC=COM";
userReturnedAtts[]={"tokenGroups"};
NamingEnumeration userAnswer = ctx.search(userSearchBase, userSearchFilter, userSearchCtls);
解决方案
该tokenGroups
属性列出了用户所属的所有安全组(不是通讯组)的 SID。如果您想获取组的名称,则必须查找每个组。这不是很有效。
它也是一个计算属性,这意味着它是在您请求它时计算的。它也是一个递归列表(如果用户是组 A 的成员,组 A 是组 B 的成员,则组 A 和组 B 都将在列表中)。这可能就是为什么需要这么长时间。
收集用户的所有成员资格可能很复杂,具体取决于您的 AD 环境和您要查找的内容。在最好的情况下,您只有一个不信任任何其他域的域。在这种情况下,您可以使用memberOf
用户的属性。这将包含用户是其直接成员的安全组和通讯组。
我在回答您的其他问题时提到了这一点,但请看一下我写的关于此的文章:查找所有用户的组。代码示例是 C#,但原则适用于任何语言。
您可能还可以从阅读我的另一篇文章中受益:是什么让会员成为会员?. 实际上有 3 种方式可以将用户视为组的成员,尽管您可能只关心一种。但我也描述了当你不想依赖的时候memberOf
。
推荐阅读
- pandas - 将熊猫数据框转换为列表并嵌套一个字典?
- python - 递归函数返回包含所有其他间隔的最小间隔
- javascript - 如何通过值或 xpath 选择索引选项
- javascript - 有没有办法在自动化testcafe测试用例时将js命令传递给开发控制台
- javascript - 如何用 PHP echo 做 JS 函数?
- reactjs - 如何在 React Bootstrap 和 Gatsby 中使用 Card.Img 渲染图像?
- reactjs - 使用 object.entries 来自 firebase 的 JSON 数据
- javascript - ng2-dragula 添加新项目后显示在顶部
- python-3.x - 使用 Python 根据条件从等长列表中获取较小的列表列表
- sql - Automation Anywhere SQL 结果