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

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

原始 KB 数: 331951

总结

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

默认情况下,访问 TGGAU 属性取决于 权限兼容性 决策(在DCPromo.exe过程中创建域时)。 新 Windows Server 2003 域的默认权限兼容性不会授予对 TGGAU 属性的广泛访问权限。 可以根据需要向 Windows Server 2003 中的新 Windows 授权访问 组授予对读取 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 操作系统上,对 TGGAU 属性的读取访问权限授予到 Windows 2000 兼容访问 组。

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

创建新的 Windows Server 2003 域时,默认访问兼容性选择是 仅与 Windows 2000 或 Windows Server 2003 操作系统兼容的权限。 设置此选项后, 预 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 之前的兼容性访问模式,则 “每个人 ”组对用户帐户对象和计算机帐户对象上的 TGGAU 属性具有读取访问权限。 在此模式下,应用程序和函数有权访问 TGGAU。

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

混合模式域和升级的域

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

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

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

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

新的 Windows Server 2003 域

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

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