某些应用程序和 API 需要访问帐户对象上的授权信息

本文介绍一些应用程序和应用程序编程接口, (API) 必须有权访问用户帐户对象或 Active Directory 目录服务中的计算机帐户对象上的 token-groups-global-and-universal (TGGAU) 属性。

原始 KB 编号: 331951

摘要

某些应用程序具有读取 token-groups-global-and-universal (TGGAU) Microsoft Active Directory 目录服务中用户帐户对象或计算机帐户对象的属性的功能。 某些 Win32 函数可以更轻松地读取 TGGAU 属性。 读取此属性或调用 API 的应用程序 (本文其余部分称为函数) ,如果调用安全上下文无权访问特性,则读取此属性的应用程序不会成功。

默认情况下,对 TGGAU 属性的访问由在 DCPromo.exe 过程中创建域时 () 的权限 兼容性 决策确定。 新 Windows Server 2003 域的默认权限兼容性不会授予对 TGGAU 属性的广泛访问权限。 可以根据需要向 Windows Server 2003 中新的 Windows 授权访问 (WAA) 组授予读取 TGGAU 属性的权限。

更多信息

token-groups-global-and-universal (TGGAU) 属性是在 Active Directory 中的计算机帐户对象和用户帐户对象上动态计算的值。 此属性枚举相应用户帐户或计算机帐户的全局组成员身份和通用组成员身份。 当用户未登录时,应用程序可以使用 TGGAU 属性提供的组信息对特定用户做出各种决策。

例如,应用程序可以使用此信息来确定用户是否已获得对应用程序控制访问权限的资源的访问权限。 需要此信息的应用程序可以直接使用轻型目录访问协议接口或 Active Directory 服务接口读取 TGGAU 属性。 但是,Microsoft Windows Server 2003 (引入了多个函数,包括 AuthzInitializeContextFromSid 函数和 LsaLogonUser 函数) ,可简化 TGGAU 属性的读取和解释。 因此,使用这些函数的应用程序可能会在不知不觉中读取 TGGAU 属性。

若要使应用程序能够通过使用 API) 直接读取此属性或间接读取此属性 (,必须向运行应用程序的安全上下文授予对用户对象和计算机对象上的 TGGAU 对象的读取访问权限。 你不希望应用程序假定它们有权访问 TGGAU。 因此,当拒绝访问时,应用程序可能会失败。 在这种情况下, (用户) 可能会收到错误消息或日志条目,说明在尝试读取此信息时访问被拒绝,并提供有关如何获取访问权限 (的说明,如本文后面部分) 中所述。

多个现有应用程序依赖于 TGGAU 提供的信息,因为默认情况下,这些信息在 Microsoft Windows NT 4.0 和早期操作系统中可用。 因此,在 Microsoft Windows 2000 和 Windows Server 2003 操作系统上,向 Pre-Windows 2000 兼容访问 组授予对 TGGAU 属性的读取访问权限。

对于使用现有应用程序的域,可以通过将这些应用程序运行为的安全上下文添加到 Pre-Windows 2000 兼容访问 组来处理这些应用程序。 相反,可以在创建域时,在 DCPromo 过程中选择 “与 Windows 2000 之前的服务器兼容的权限” 选项。 (Windows Server 2003 上,此选项的措辞如下: “与 Windows 2000 之前的服务器操作系统兼容的权限”。) 此选择将 “每个人 ”组添加到 Windows 2000 之前的兼容访问 组,从而授予 “每个人” 组对 TGGAU 属性和许多其他域对象的读取访问权限。

创建新的 Windows Server 2003 域时,默认访问兼容性选择为 “仅与 Windows 2000 或 Windows Server 2003 操作系统兼容的权限”。 设置此选项后, Windows 2000 Pre-Windows 2000 兼容性访问 组仅包含经过身份验证的用户内置安全标识符,并且对对象的 TGGAU 属性的读取访问权限受到限制。 在这种情况下,需要访问 TGGAU 组的应用程序将被拒绝访问,除非运行应用程序的帐户具有域管理员权限或类似的用户权限。

使应用程序能够读取 TGGAU 属性

为了简化向必须读取该属性的用户授予 token-groups-global-and-universal (TGGAU) 属性的读取访问权限的过程,Windows Server 2003 引入了 Windows 授权访问 (WAA) 组。

在 Windows Server 2003 域的新安装中,WAA 组被授予对用户对象和组对象的读取 TGGAU 属性的访问权限。

Windows 2000 域

如果域处于 Windows 2000 之前的兼容性访问模式, 则 Everyone 组对用户帐户对象和计算机帐户对象具有 TGGAU 属性的读取访问权限。 在此模式下,应用程序和函数有权访问 TGGAU。

如果域未处于 Windows 2000 之前的兼容性访问模式,则可能需要启用某些应用程序才能读取 TGGAU。 由于 Windows 2000 上不存在 Windows 授权访问组 ,因此建议为此创建域本地组,并将需要访问 TGGAU 属性的用户或计算机帐户添加到该组。 必须向此组授予对 tokenGroupsGlobalAndUniversal 用户对象、计算机对象和对象属性的访问权限 iNetOrgPerson

混合模式域和升级的域

将 Windows Server 2003 域控制器添加到 Windows 2000 域时,之前选择的访问兼容性选择不会更改。 因此,在 Windows 2000 之前的兼容访问模式下,已升级到 Windows Server 2003 的混合模式域和域继续具有 Windows 2000 之前的兼容性访问组中的“每个人”组。 此外, Everyone 组仍有权访问 TGGAU 属性。 在此模式下,应用程序和函数有权访问 TGGAU。

如果混合模式域未处于 Windows 2000 之前的兼容性访问模式,可以通过 WAA 组授予权限:

  • 将 Windows Server 2003 域控制器提升为浮动单主操作服务器时,会自动创建 WAA 组。
  • WAA 组不会自动授予对混合模式域和升级域上的 TGGAU 属性的访问权限。

在 Windows 授权访问 (WAA) 组有权访问 TGGAU 属性后,可以将需要访问的帐户置于 WAA 组中。

新的 Windows Server 2003 域

如果域处于 Windows 2000 之前的兼容性访问模式, 则 Everyone 组对用户帐户对象和计算机帐户对象具有 TGGAU 属性的读取访问权限。 在此模式下,应用程序和函数有权访问 TGGAU。

如果域未处于 Windows 2000 之前的兼容性访问模式,请将需要访问 TGGAU 的帐户添加到 WAA 组。 在 Windows Server 2003 的新安装中,WAA 组已对用户对象和计算机对象具有对 TGGAU 的读取访问权限。