创建控件访问权限
若要向 Active Directory 服务器添加控件访问权限,请在 Configuration 分区的 Extended-Rights 容器中创建 controlAccessRight 对象。 有关详细信息和代码示例,请参阅 用于创建控件访问权限的示例代码。 若要使用控制访问权限,必须完成其他几个步骤,具体取决于控制访问权限是用于特殊操作还是属性集。
如果为属性集定义控件访问权限,请使用 controlAccessRight 对象的 rightsGUID 来标识集中的属性。 每个属性都由 Active Directory 架构中的 attributeSchema 对象定义。 attributeSchema 对象的 attributeSecurityGUID 属性标识属性集(如果有)。属性所属。 请注意, attributeSecurityGUID 属性是单值属性,以二进制格式(八进制字符串语法)存储 GUID。
如果定义控制访问权限来限制对特定操作的访问,则当用户尝试该操作时,应用程序必须执行访问检查。
设置访问检查
- 创建一个控制访问权限,用于定义对应用程序或服务的访问类型。 有关详细信息,请参阅以下代码示例。
- 创建一个Active Directory 域服务对象,该对象表示要保护的应用程序、服务或资源。
- 将对象 ACE 添加到对象安全描述符中的 DACL,以授予或拒绝用户或对该对象的控制访问权限进行分组。 有关详细信息,请参阅 在对象的 ACL 中设置控件访问权限 ACE。
- 当用户尝试执行该操作时,通过将对象安全描述符和用户访问令牌传递给 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 属性。