Active Directory 中的用户、计算机和组统称为“安全主体”。安全主体会被分配一个唯一的叫做安全标识符 (SID) 的字母数字字符串。安全主体的 SID 由一个域范围的 SID 和一个具有唯一性的相对标识符 (RID) 串接而成。RID 是在创建安全主体时由域中的RID Master分配的。RID Master的作用是:分配可用RID池给域内的DC和防止安全主体的SID重复。
S-1-5-21-1004336348-1177238915-682003330-2100
==>
S-1-5-Domain Identifier-Relative Identifier
各域控制器维护着从 RID 操作主机上的全局池获得的本地 RID 池。默认情况下,RID 池是以 500 这一增量获取的。当 RID 池剩余50% 时,域控制器将请求一个新 RID。大规模 ADMT 迁移环境中的域控制器可能在很短的时间内创建大量的安全主体。与传统的企业部署相比,这可能会更快地用完其本地 RID 池。
当域控制器的本地 RID 池用完但又由于域控制器自身的问题而无法从 RID 操作主机上获取新池时,就会出现问题。RID 操作主机、网络以及域控制器于是将无法创建更多的安全主体,并停止公布域控制器服务,直到获得一个新的本地池为止。
为了减少这种丢失服务的可能性,管理员可以通过在DC上调整 REG_DWORD RID Block Size 值来增加由 RID 操作主机在每个池中分配的 RID 的数量,此值位于以下注册表项中:
然而,由于 RID 阈值比较逻辑的缺陷,小于500 的“RID Block Size”(RID 块大小)值实际上会被忽略,并返回默认的分配值 500。
如果您决意要使用 一个不同的 RID 块大小,只有 RID 操作主机上配置了此更改。不过,为简化对此设置的管理,可在目标域中所有的域控制器上以完全相同的方式配置此值。这样,如果 RID 操作主机转移到另一个域控制器,无须另外更新即可让 RID 块大小保持一致,而且“系统状态还原”将不会误覆盖特意的设置。
注意,对于每个域而言,全局 RID 空间,以及您能够创建的用户、计算机和组的数目都是有限的(约有 2^30 个 RID)。在域范围的 RID 池用完之后,将不能在域中创建新的安全主体。因此,增加“RID 块大小”有一定的风险。例如,每当通过正常或强制降级解除某个域控制器时,或者在出现硬件故障时,其 RID 将全部丢失。类似地,每当从备份中还原一个域控制器时,其 RID 将全部失效,这样有助于防止将同一个 RID 分配给一个以上的用户帐户。
也就是说RID Block Size值越大,潜在域RID池用的越快。系统会报16644错误:The maximum domain account identifier value has been reached. No further account-identifier pools can be allocated to domain controllers in this domain.
RID操作主机分配RID池:
当你创建一个可读域控时,它会从RID操作主机获取500个RIDS,也就是说如果你提升10个DC的话,RID操作主机就会发布5000个RIDs,如果其中8台DC降级,然后重新提升为DC,现在一共发布了9000个RIDs,如果你又使用系统状态还原了某一台DC,那么现在共有9500个RIDs。获取到的RID 池不可回收使用,即使没有使用或使用的对象已经被删除了
.
虽然域可以有10亿RIDs可供使用,但如果反复大量创建用户,也有可能会出现RIDs用完的情况,出现以下情况会从RID操作主机上获取RID池:
创建用户,计算机,组
提升DC
正常降级DC
使用系统状态还原DC
强夺RID操作主机角色到另一台DC
以下非正常操作会造成RID池的浪费
使用脚本意外批量用户,计算机和组
创建并启用的用户不能满足密码策略
DC未启动的时间超过了墓碑时间
DC的元数据已经被清理
森林恢复
发起LDAP请求执行invalidateRidPool操作
在注册表里增加RID Poll Size的值
为让管理人员监控RID的使用情况,提供了以下方式去获取相关信息
1.Dcdiag.exe /test:ridmanager /v
rIDAllocationPool 代表待使用的RID池
rIDPreviousAllocationPool 代表当前正在使用的RID池
rIDNextRID 代表最近一次分配的RID为1163
2.LDP.exe结合ADSIEDIT.exe 获取信息
使用ADSEDIT,查看 CN = RID Manager$,CN = 系统,DC =domain,DC = com
点击查看相关字段,使用LDP转换获取信息
RidAvailablePool为整个域的全局 RID 空间。为整个域的全局 RID 空间。作为大整数的上限和下限的部分。上半部分中定义安全主体可分配的每个域 (0x3FFFFFFF 或刚刚超过 10 亿) 的数。下半部分是已分配的域中的 Rid 数。若要查看这两个部件,用在 Ldp.exe实用程序菜单上大整数转换器命令。
使用ADSEDIT,查看 CN = Rid Set Cn =computername,ou = 域控制器,DC =domain,DC = COM
RidAllocationPool每个域控制器都有两个池: 它们目前采取行动,以及下一步他们将使用的池。它是下一步的池,分配由 RID FSMO,当前池用尽时,则在域中安全主体的创建时将使用它。大整数转换器命令用于 Ldp.exe 的实用程序中查看这两个池。
从
另外你会发现rlDAllocationPool和rlDPreviousAllocationPool的数值是一样的,注意只有当前的RID池使用达到50%,才会获取下一个RID池,所以它们是一样的。
参考资料:
http://support.microsoft.com/kb/305475
http://blogs.technet.com/b/askds/archive/2011/09/12/managing-rid-pool-depletion.aspx