【问题标题】:How do I query effective permissions on an Active Directory Object?如何查询 Active Directory 对象的有效权限?
【发布时间】:2011-11-30 15:51:07
【问题描述】:

我正在尝试以编程方式确定当前用户是否对给定的 Active Directory 对象具有某些权限(特别是在这种情况下,我正在尝试确定该用户是否具有其他 Exchange 用户的“代理发送”权限或分发列表对象)。

我已经弄清楚如何使用 ADSI 访问 ntSecurityDescriptor 属性:我可以枚举 IADsSecurityDescriptor 的 DiscretionaryACL 属性中的 ACE。但是:

  • 如何根据该数据确定受托人是否明确允许或拒绝“发送为”权限?
  • 当通过组成员资格间接授予权限时,我如何发现这一点?我真的必须通过(递归地)检查用户所属的所有组来自己解析有效权限吗?当然,该任务必须有一个 API...

FWIW,我正在使用 ActiveDs.dll 类型库在 Delphi(即本机 Win32 代码)中进行编码,因此特定于 .NET 的解决方案对我没有太大帮助,除非它们的源代码为我提供了如何执行相同操作的线索本机代码中的东西。 PowerShell 也是如此。


在任何人开始之前:我已经知道 PR_EMS_AB_PUBLIC_DELEGATES 和 PR_EMS_AB_PUBLIC_DELEGATES_BL_O 扩展 MAPI 属性。然而,这不是我所追求的。这些属性指的是“代表发送”权限(也称为委托),而不是“代表发送”权限,这是完全不同的事情。

【问题讨论】:

  • @RRUZ :感谢您的介入,但我宁愿将 delphi-tag 排除在外,特别是因为一些能够回答这个问题的人甚至可能将它列入他们的忽略列表。我希望最终的解决方案同样适用于任何可以使用 COM 的编程语言。
  • Delphi 特有的后续问题在这里:stackoverflow.com/q/8524507/9784

标签: permissions active-directory exchange-server adsi


【解决方案1】:

这是 MSDN 文章解释 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms675580(v=VS.85).aspx。附带的示例显示了如何调用 API。

【讨论】:

  • 谢谢,这看起来很有希望!不幸的是,直到下周我才有时间尝试这个。一旦我知道更多信息,我会尽快回复结果(希望得到支持和接受)。
  • 好的,我现在已经更进一步了(我花了一些时间将示例代码转换为 Delphi)。我设法创建了一个编译和运行的示例,但是,对于 Windows 安全来说,我是全新的,我真的不能说我明白我在做什么,甚至我正在用这个程序检查它到底是什么...... :(
  • 我确信我不会在中长期内了解基本概念,但我希望有一种更高级的方法来帮助我入门。理想情况下,我想传入一个对象 SID 和一个访问掩码(尽管我仍然需要弄清楚,在我的特定情况下我应该检查什么,即特定于 Exchange 的“发送为” - 对 - 我确定必须有一个带有常量的头文件,不是吗?)并返回True或False(我不需要验证除当前用户之外的任何用户的访问权限)。
  • 在研究这个例子以及如何将它翻译成 Delphi 时,我还偶然发现了 AuthZ-API。这也会提供我需要的功能吗?如果是这样,这样做有什么好处吗?我还想知道为什么该示例使用AccessCheckByObjectTypeResultList 而不仅仅是AccessCheck 或其任何其他变体。这些的 MSDN 总结几乎相同... :-/
  • 我认为我的理解已经深入了很多,但我仍然无法让它发挥作用。显然,我对示例的 Delphi 翻译在某些方面仍然不正确:当我调用 AccessCheckByObjectTypeResultList 时,它总是失败并且最后一个错误是 87(“参数不正确”) - 但我不知道这个函数的无数个参数中的哪一个接受它在这里抱怨...... :(
猜你喜欢
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多