创建控件访问权限

若要向 Active Directory 服务器添加控件访问权限,请在 Configuration 分区的 Extended-Rights 容器中创建 controlAccessRight 对象。 有关详细信息和代码示例,请参阅 用于创建控件访问权限的示例代码。 若要使用控制访问权限,必须完成其他几个步骤,具体取决于控制访问权限是用于特殊操作还是属性集。

如果为属性集定义控件访问权限,请使用 controlAccessRight 对象的 rightsGUID 来标识集中的属性。 每个属性都由 Active Directory 架构中的 attributeSchema 对象定义。 attributeSchema 对象的 attributeSecurityGUID 属性标识属性集(如果有)。属性所属。 请注意, attributeSecurityGUID 属性是单值属性,以二进制格式(八进制字符串语法)存储 GUID。

如果定义控制访问权限来限制对特定操作的访问,则当用户尝试该操作时,应用程序必须执行访问检查。

设置访问检查

  1. 创建一个控制访问权限,用于定义对应用程序或服务的访问类型。 有关详细信息,请参阅以下代码示例。
  2. 创建一个Active Directory 域服务对象,该对象表示要保护的应用程序、服务或资源。
  3. 将对象 ACE 添加到对象安全描述符中的 DACL,以授予或拒绝用户或对该对象的控制访问权限进行分组。 有关详细信息,请参阅 在对象的 ACL 中设置控件访问权限 ACE。
  4. 当用户尝试执行该操作时,通过将对象安全描述符和用户访问令牌传递给 AccessCheckByTypeResultList 函数来验证用户权限。 有关详细信息,请参阅 在对象的 ACL 中检查控件访问权限。

根据对象检查访问的结果,应用程序或服务可以允许或拒绝用户访问应用程序或服务。

创建 controlAccessRight 对象时,请设置下表中列出的属性,使对象成为Active Directory 域服务和 Windows 安全系统识别的法律控制访问权限。

Attribute 说明
快递 之 家 一个单值属性,它是扩展权限容器中对象的相对可分辨名称(RDN)。 cn 是Active Directory 域服务中访问控制权限的名称。
appliesTo 一个多值属性,它列出访问控制权限应用于的对象类。 例如,Send-As 访问控制权限在其 appliesTo 属性中列出用户计算机对象类。 在列表中,每个对象类由 classSchema 对象的 schemaIDGUID 标识。 GUID 存储为 COM 库中 StringFromGUID2 函数生成的表单的字符串,但不存储起始和终止大括号 ({ })。 例如,以下 GUID 是计算机类的 schemaIDGUID:bf967a86-0de6-11d0-a285-00aa003049e2。
请注意,classSchema 对象的 schemaIDGUID 属性使用八进制字符串语法存储为二进制 GUID。 若要将此八进制字符串格式转换为 appliesTo 属性中使用的字符串格式,请使用 StringFromGUID2 函数并从返回的字符串中删除大括号。
有关其中一个预定义对象类(例如用户计算机)的 schemaIDGUID 属性的详细信息,请参阅Active Directory 域服务参考中的 Active Directory 架构参考页中的类引用页。 有关详细信息和从 classSchema 对象检索 schemaIDGUID 的代码示例,请参阅 Reading attributeSchema 和 classSchema 对象
displayName 用于在用户界面中显示访问控制权限的字符串,例如安全属性页和Active Directory 用户和计算机 MMC 管理单元中的其他位置。
rightsGuid 一个 GUID,用于标识 ACE 中的控制访问权限。 GUID 存储为 StringFromGUID2 函数生成的表单的字符串,但不存储起始大括号和终止大括号。 对其他一些实用工具使用Uuidgen.exe为控件访问权限生成 GUID。如果定义新的属性集,则使用 controlAccessRight 对象的 rightsGuid来标识集中的属性。 对于属性集中的每个属性,请将属性的 attributeSecurityGUID 值设置为属性集的 rightsGUID 的值。 属性的 attributeSecurityGUID 值存储在 Active Directory 架构的属性Schema 定义中。 attributeSecurityGUID 属性是单值属性,以二进制格式存储 GUID(八进制字符串语法)。
objectClass 此属性将 controlAccessRight 指定为对象类。
validAccesses 对于属性集,请将此属性设置为0x30(ADS_RIGHT_DS_READ_PROP | ADS_RIGHT_DS_WRITE_PROP)。 对于控制访问权限,请将此属性设置为0x100(ADS_RIGHT_DS_CONTROL_ACCESS)。 仅当 validAccesses 属性设置为适当的值时,安全属性页才会识别控制访问权限。 如果为零,则安全属性页将忽略或未显示控件访问权限。

请注意,预定义的架构类使用 controlAccessRight 对象的 localizationDisplayId 属性来指定用于从Dssec.dll检索本地化显示名称的消息标识符。 如果定义新的 controlAccessRight 对象,请不要设置 localizationDisplayId 属性。