批量(导入导出)迁移AD中的用户信息和密码到新环境中,同时保持用户在MOSS中的权限【addusers,ldifde,copypwd,UserInfo,tp_SystemID】
2010-09-06 16:25
621 查看
工具介绍:
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/
同步MOSS的用户SID,和AD的用户SID保持一致
DECLARE @login varchar(40), @systemid varbinary(128)
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
PRINT 'Resetting user ' + @login + ' to new SID '
PRINT suser_sid(@login)
UPDATE UserInfo
SET tp_systemid = suser_sid(tp_login) WHERE CURRENT OF curUsers
FETCH NEXT FROM curUsers INTO @login, @systemid
END
CLOSE curUsers
DEALLOCATE curUsers
GO
另外介绍:
工具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
【现象】
客户的一台MOSS服务器迁移到了一个新域,域名不同。原来的用户账号也迁移过来了,用户可以登录到域,但是访问MOSS的时候提示没有权限,重新授权后也可以访问。
【分析】
AD账号迁移到新域之后,SID发生了变化。MOSS网站的WSS_Content数据库中Userinfo表中存储的还是旧的SID,所以提示无法访问。
有部分账号客户手工重新添加到MOSS中了,这部分账号不能更新SID,因为Userinfo表有一个tp_siteid,tp_login,tp_deleted的组合主键,不运出现重复。
【解决方法】
1.将WSS_Content 数据库中UserInfo表中的账号和SID 都更新为新域的账号和SID
2.使用游标技术,每次取一个账号
3.使用Suser_SID(‘LoginName’) 函数获取账号的SID
4.Replace(列名,'字符串','字符串')用来替换旧的域名为新的域名
5.begin try ....end try, begin catch...end catch 语句用来进行异常处理,让代码出现异常之后,还能继续向下执行
【修复代码】
DECLARE @Login Varchar(40), @Systemid Varbinary(128)
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
来源:/article/4661692.html
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/
同步MOSS的用户SID,和AD的用户SID保持一致
DECLARE @login varchar(40), @systemid varbinary(128)
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
PRINT 'Resetting user ' + @login + ' to new SID '
PRINT suser_sid(@login)
UPDATE UserInfo
SET tp_systemid = suser_sid(tp_login) WHERE CURRENT OF curUsers
FETCH NEXT FROM curUsers INTO @login, @systemid
END
CLOSE curUsers
DEALLOCATE curUsers
GO
另外介绍:
工具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
【现象】
客户的一台MOSS服务器迁移到了一个新域,域名不同。原来的用户账号也迁移过来了,用户可以登录到域,但是访问MOSS的时候提示没有权限,重新授权后也可以访问。
【分析】
AD账号迁移到新域之后,SID发生了变化。MOSS网站的WSS_Content数据库中Userinfo表中存储的还是旧的SID,所以提示无法访问。
有部分账号客户手工重新添加到MOSS中了,这部分账号不能更新SID,因为Userinfo表有一个tp_siteid,tp_login,tp_deleted的组合主键,不运出现重复。
【解决方法】
1.将WSS_Content 数据库中UserInfo表中的账号和SID 都更新为新域的账号和SID
2.使用游标技术,每次取一个账号
3.使用Suser_SID(‘LoginName’) 函数获取账号的SID
4.Replace(列名,'字符串','字符串')用来替换旧的域名为新的域名
5.begin try ....end try, begin catch...end catch 语句用来进行异常处理,让代码出现异常之后,还能继续向下执行
【修复代码】
DECLARE @Login Varchar(40), @Systemid Varbinary(128)
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
来源:/article/4661692.html
相关文章推荐
- 批量(导入导出)迁移AD中的用户信息和密码到新环境中,同时保持用户在MOSS中的权限【addusers,ldifde,copypwd,UserInfo,tp_SystemID】
- 四.用户管理页面(显示所有的用户信息,同时为用户的添加,编辑,修改密码,删除,修改权限等功能提供相应的链接) UserMange.aspx
- 用Excel函数简化批量导入AD用户及修改密码 推荐
- 用Excel函数简化批量导入AD用户及修改密码
- 使用CSVDE命令批量导入/导出AD用户
- 用Excel函数简化批量导入AD用户及修改密码
- 使用CSVDE命令批量导入/导出AD用户
- ORACLE迁移中的一些经验(三)批量导出index 建索引、用户、权限等语句
- 巧用Excel函数,简化批量导入AD用户及密码修改 推荐
- 巧用Excel函数,简化批量导入AD用户及密码修改
- 用Excel函数及csvde简化批量导入域(AD)用户及修改密码
- AD帐号批量导入导出
- Windows PowerShell 批量迁移Windows用户信息
- 利用CSVDE和DSADD实现AD帐号批量导入导出
- Csvde:批量导入、导出AD帐户
- 利用CSVDE和DSADD实现AD帐号批量导入导出
- oracle导入\导出数据库&&删除oracle某用户下的信息
- 创建oracle数据库的表空间、用户、目录、导入\导出文件等信息
- AD下批量导入"域用户"