如何使用 LDAP 架构了解 Active Directory 对象的属性是否可修改?

问题描述 投票:0回答:1

我正在尝试使用 LDAP c++ 来确定对象的属性是否可修改。

到目前为止,我已尝试查询架构对象并尝试找到 systemFlags 和可修改属性之间的一些相关性。

但是我无法理解模式中属性的一个硬性且快速的属性,它可以告诉我们属性是否可修改。

例如,即使管理员也无法修改对 AD 完整性很重要的少数属性,但我正在寻找一种方法来预先以编程方式识别这些属性,以便我什至不会尝试触摸它们。

或者还有其他方法来识别这些,我缺少这些。

c++ windows azure-active-directory active-directory ldap
1个回答
0
投票

正如评论中的user207421所指出的,当谈到Azure AD时(或者现在是“Microsoft Entra ID?):

  • 用户修改属性的能力不仅仅取决于属性的架构定义。它还取决于分配给用户的权限。即使是管理员也可能被限制修改对 AD 完整性至关重要的某些属性。

  • zome 属性本质上是操作性或结构性的,例如那些有助于

    Distinguished Name (DN)
    objectClass
    的属性。这些通常是不可修改的,但此属性可能不会在架构中明确说明。

  • 该架构可以告诉您某个属性通常是只读的还是系统专用的,但它可能无法提供有关不可修改属性的所有信息,尤其是那些受权限或其内在性质控制的属性。

因此,要以编程方式识别不可修改的属性,您需要:

  • 在架构中查询
    systemFlags
    searchFlags
    等标志,以识别通常不可修改的属性。
  • 实现检查当前用户对某个属性的权限的功能。这可能涉及尝试“试运行”修改或查询特定于权限的属性(如果可用)。
  • 制定已知操作和结构属性的列表,这些属性通常是不可修改的(如构成 DN 的属性)。

但我正在寻找一种方法来预先以编程方式识别这些属性,这样我就不会尝试触摸它们。

...由于提前识别所有不可修改的属性具有挑战性,我仍然建议设计您的应用程序以优雅地处理修改异常。
含义:捕获与修改尝试相关的错误并适当处理它们。

try {
    // Attempt to modify an attribute
    modifyAttribute(ld, attributeName, newValue);
} catch (const LDAPModificationException& e) {
    // Handle the exception if modification is not allowed
    std::cerr << "Modification not allowed: " << e.what() << std::endl;
}
© www.soinside.com 2019 - 2024. All rights reserved.