批量(导入导出)迁移AD中的用户信息和密码到新环境中,同时保持用户在MOSS中的权限【addusers,ldifde,copypwd,UserInfo,tp_SystemID】
2009-10-30 22:32 Virus-BeautyCode 阅读(8206) 评论(2) 编辑 收藏 举报工具介绍:
1、ldifde是系统自带命令行工具,直接在cmd就可以运行。
2、addusers是在wind2k resource kit中的命令工具,可以通过安装wind2k resource kit来获取,下载地址:http://download.microsoft.com/download/8/e/c/8ec3a7d8-05b4-440a-a71e-ca3ee25fe057/rktools.exe
3、copypwd可以导出、导入域用户的密码,可以在迁移用户之后,用来恢复用户的密码,当然了,由于导出的密码是hash的结果,能够被解密,为安全起见,使用之后请将导出的密码文件删除。下载地址:http://blogimg.chinaunix.net/blog/upfile2/081231194831.zip
用到的sql:
sql来自: http://vspug.com/dustin/2007/04/08/stsadm-in-a-gui-2007-version/
另外介绍:
工具ADSI Editor也是一个很好用的工具,可以编辑AD中的很多信息,还可以使我们更加了解AD。可以通过安装系统安装盘的【I386\SUPPORT\TOOLS】目录中的SUPTOOLS.MSI,来安装。也可以下载:http://download.microsoft.com/download/3/e/4/3e438f5e-24ef-4637-abd1-981341d349c7/WindowsServer2003-KB892777-SupportTools-x86-ENU.exe文件进行安装。
需求说明:
如果你的AD环境因为多次的修改,例如调整域名、修改设置、反复安装和域相关的软件,导致在安装某些软件的时候会提示你【联系不上域,找不到域控制器】之类的错误的时候,这时候你想到了重新安装系统和域,但是域中的用户怎么办?就算用户抢救回来了,可是大多用户都修改了密码,想要这次变动在他们不知道的情况下,而且他们不会向你的上司抱怨“怎么密码又给我重置了,你们IT的每天都在做什么啊”,然后这些抱怨最终是会落到你的头上的,这时候怎么办?密码也回来了,可是用户的SID呢?在MOSS网站中用户的权限怎么办?新添加的用户虽然和以前的用户信息都一致,可是SID不一致,导致用户在MOSS网站的权限需要重新配置,在不能编辑新用户的SID的情况下(至少现在还不知道如何编辑域用户的SID值),如何修改它们在MOSS网站中的映射用户的SID值呢?
步骤说明:
1、导出指定的组织单元信息,192.168.0.1为域控制器的IP
ldifde -f c:\exportOu.ldf -s 192.168.0.1 -d "dc=moss,dc=com" -p subtree -r "(&(objectClass=organizationalUnit)(ou=TestOu))" -l "cn,name,objectClass,ou,DistinguishedName,objectCategory"
2、导出指定的域(组织单元)中用户信息,192.168.0.1为域控制器的IP
ldifde -f c:\exportUser.ldf -s 192.168.0.1 -d "ou=TestOU,dc=moss,dc=com" -p subtree -r "(|(objectClass=user)(objectClass=group))" -l "cn,name,objectClass,displayName,DistinguishedName,sAMAccountName,sn,title,userPrincipalName"
3、导入域组织单元信息,192.168.0.1为域控制器的IP
ldifde -i -f c:\exportOu.ldf -s 192.168.0.1
4、导入域中用户信息,192.168.0.1为域控制器的IP
ldifde -i -f c:\exportUser.ldf -s 192.168.0.1
5、导出域用户密码【不能在远程中执行这个命令,只能在本机使用这个命令,运行的同时注意关闭防火墙软件,不能修改命令中的文件名copypwd.txt】
copypwd dump > copypwd.txt
6、导入域用户密码,自动查找同目录的copypwd.txt文件
copypwd set
7、启用账户【导入用户之后账户是禁用状态】
8、修改账户的密码策略为【密码永远不过期】
9、使用AD的账号SID同步MOSS的内容数据库的【UserInfo】中的【tp_SystemID】列的对应值,使用开始工具中介绍的用到的sql【同步MOSS的用户SID,和AD的用户SID保持一致】,因为在MOSS网站的内容数据库的UserInfo表中存储了登录网站的用户信息,其中的tp_SystemID列存储的是AD的域用户的SID值,所以我们在新建用户之后可以使用这段SQL来更新UserInfo表中的tp_SystemID列,使其和新添加的用户的SID保持一致,这样新添加的用户在MOSS网站中的权限就可以不用重新配置了。
注意:
1、导入密码之后密码策略会变成【下次登陆需要修改密码】,只要在登陆之前设置为【密码永远不过期】
2、导入密码之前删除不需要导入密码的帐户信息,只导入需要恢复密码的帐户信息,删除例如administrator之类的系统帐户信息
3、使用addusers导入导出域用户有局限,因为导出的用户信息属性有限,有的属性导不出来
4、使用ldifde导入组织单元和用户的时候有一些属性不能导入,我刚开始导出的时候就是想多导出一些属性,然后把这些属性都导进去,用户信息就齐全了,可是后来发现有的属性可以导出,但是导入的时候就会提示【架构不正确】之类的错误信息,经过多次尝试,删除不能导入的属性,就可以正常运行了。
下面是另外一位老兄的blog,原文地址如下,大家也可以参考。
http://imdbt.blog.51cto.com/903896/213331
DECLARE Curusers CURSOR LOCAL FOR
SELECT Tp_Login, Tp_Systemid FROM Userinfo Where Tp_Deleted = 0
OPEN Curusers
FETCH NEXT FROM Curusers INTO @Login, @Systemid
WHILE @@FETCH_STATUS = 0
BEGIN
Begin Try
PRINT 'Resetting Login ' + @Login + ' To New Login '
Update Userinfo Set Tp_Login=Replace(Tp_Login, '旧域名\','新域名\')
WHERE CURRENT OF Curusers
End Try
Begin Catch
PRINT 'Resetting Login ' + @Login + ' Failed! '
PRINT Error_Message()
End Catch
Begin Try
PRINT 'Resetting SID ' + @Login + ' To New SID '
PRINT Suser_Sid(@Login)
UPDATE Userinfo SET Tp_Systemid = Suser_Sid(Tp_Login)
WHERE CURRENT OF Curusers
End Try
Begin Catch
PRINT 'Resetting SID ' + @Login + ' Failed! '
PRINT Error_Message()
End Catch
FETCH NEXT FROM Curusers INTO @Login, @Systemid
END
CLOSE Curusers
DEALLOCATE Curusers