您当前的位置:首页 > 其他技术 > 系统技术

详解域用户的登录过程和GC的关系

本文出处:网游动力作者:本站发布时间:2008-11-20阅读次数:
1. 模拟环境 
    根域为contoso.msft,dc为dc1.contoso.msft,dc2.contoso.msft同时也是GC,所处站点site 1;

    子域为child.contoso.msft,dc为child-dc.child.contoso.msft,所处站点site 2不是GC;在域child.contoso.msft上有用户john用于验证本实验!

    2. Gc存储着森林中所有域的域分区的所有对象的部分属性,同时还存储着林中所有通用组的成员列表,在域用户登录的过程中和查询过程中,GC发挥着重要的作用;或者可以说没有GC域用户在一般情况下就不能登录,这里为什么说是在一般情况下,因为有特例(后面再说)!

    先说说域用户的登录过程和GC的关系:首先域用户要想登录成功,必须从所在域的dc那里成功构建“安全访问令牌”,没有这个安全访问令牌域用户是不能登录的;那么这个域用户所在域的dc是如何来为用户成功构建安全访问令牌呢?要成功构建安全访问令牌必须满足三个条件:

    a.  从dc那里取得这个域用户的SID

    b.  从DC那里取得这个域用户所具有的权限

    c.  取得这个域用户的所属组:包括本地域组、全局组、通用组;本地域组和全局组可以向dc查询,但是通用组只有由DC向GC去查询,因为只有GC存储了通用组的成员列表;这里不管这个用户是否属于某个通用组,都要去查询GC来确定这个用户是否属于某个通用组。

    综合以上三个因素,所以当GC不在线的情况下,即使当前域的dc是ok的,当前域的dns是ok的,同样用户不能登录域!

    结合实例就是:当contoso.msft中的dc2.contoso.msft(同时也是GC)宕机的情况下,其子域中的用户john是不能登录其所在的域child.contoso.msft的,即使child-dc.child.comtoso.msft是正常的!

    例外:

    a 域管理员组的成员不受此限制

    b 登陆过的客户端可以使用本机的缓存来登录

    c 2003的域模式如果为默认的混合模式,在这种情况下通用组是不可用的,所以这个时

      候是不用去查询GC来确定通用组的情况的!

    3. 通用组成员缓存

    那如何在GC不在线的情况下,也能让域用户顺利登录呢?

    解决问题的方法就是使用通用组成员缓存(当然了,在每个站点都设置GC就不提了,这样做就要考虑硬件成本,毕竟GC会复制大量信息;单域的情况下除外,单域中建议所有的dc都提升为GC,这个时候是不会增加复制流量的);要想在GC不在线的情况下,域用户也能登录;那就必须使用缓存,使用客户机的缓存(前提是此用户必须在这个客户机上登录)或使用dc缓存(这样即使此用户没有在这台客户机上登录,也能登录;当然了要有缓存信息的话,必须要在域中的某个地方登录);这个缓存在dc上信息的可以在dc上看的到的。
   4.验证 
    首先在child-dc.child.contoso.msft上新建一个用户john,然后在dc上看一下;这个用户的msds-cached-membership属性,是空的,是not set!这个属性就是缓存用户的通用组和全局组的信息的!