有关域环境下的SID号的问题

来源:互联网 发布:单引号转义字符 sql 编辑:程序博客网 时间:2024/04/27 18:14

      操作系统在标识用户和计算机的时候,并不是根据名称来辨识的,而是依据SID号来区分的,什么是SID号呢,SID的中文名称叫做安全标识符,这个东西有点类似于我们人的身份证号,是一串很长的字符,当你建立一个账户的时候,系统会给它分配一个SID号,当你把这个账户删除后,再建立一个同名账户,哪怕密码也设置成一摸一样,但这两个账户绝对是不同的,因为SID号不一样。要想查看一个账户或者计算机的SID号,需要使用一个工具,这个工具就是sysinternals出品的名为psgetsid的工具,下载地址:http://live.sysinternals.com,这是个命令行的工具,需要在CMD环境下运行,当你第一次运行的时候会出现一个使用协议的对话框,如下图:
5_agree 点击“agree”或者直接敲回车键就可以了。如果不给任何参数的话,默认查看的是当前计算机的SID,要想查看某个账户的SID,在命令后面跟上具体的某个账户的名字就可以了。
在域环境下,域也有SID号,这个SID和这个域的第一台域控制器的SID相同,如下图:
1_domain_sid 图上,域名为cdtb.com,server2是这个域的第一台域控制器,可以看出,这两者的SID号相同。然后我们在AD中建立一个名为test的账户,并查看这个账户的SID号:
2_user_sid      从图中可以看出,名为test的账户的SID号=域SID+一个数字,而这个数字又被称为RID(相对ID)。
      我们都知道,在微软的域环境下,为了避免单台DC带来的稳定性和可靠性的问题,在一个域中至少需要搭建两台DC。而如果我们不想让某个DC继续担任DC的角色的时候,需要卸载它上面的活动目录组件。那天,一个学生问我,既然一个域的SID是和第一台域控制器的SID相同,如果在有多台DC存在的情况下,把这个域的第一台DC上的活动目录卸载了,使其成为一台成员服务器,那这个域的SID会改变吗?
      说实话,这个问题当时还真的难倒我一会儿,我还真没考虑过这个问题,也没做过这种实验,但是凭着经验和理论知识判断,域的SID号不会变,但我没有百分百的把握,大概有8成把握吧,我为什么会这么判断呢,因为SID和安全设置相关,如权限的设置,如果降级一个域控制器导致域SID的改变,那么原来的安全设置全部失效,这极其不合理,所以我才敢断定域的SID号不会改变。但这终究是停留在理论上,还是需要用事实去证明,所以我用VPC搭建了实验环境,上面的截图就是这个实验环境下的,然后成功将这个域的第一台域控制器降级成为一台成员服务器(具体过程不详述,请查阅相关资料),紧接着登录一台DC,使用psgetsid去看域的SID和那个test账户的SID有没有变化,如下图:
3_domain_sid_new 很明显,SID号没有发生变化,和我的推测完全一样。那被降级成一台成员服务器的那台机器(也就是原主域控制器server2)的 
SID号有没有发生变化呢?使用psgetsid查看,如下图:
4_server2_sid      很明显,SID号变了,由此可以推断在从域控制器降级成成员服务器的过程中,重新产生SID号。而实际上,在域环境下,所有域控制器的SID和域的SID是相同,换句话说,当你把一个Server版本的操作系统提升成域控制器的时候,它的SID会改成域的SID,而相反,当把某台域控制器进行降级的时候,会产生新的SID,这个新的SID应该是随机产生的。