| 错误21002:[SQL-DMO]用户"xxx"已经存在 
 
 MSSQL2000迁移数据库后,新建相同用户名的时候出现错误提示:“错误21002:[SQL-DMO]用户"xxx"已经存在”产生原因:
 这就是我们通常所说的“孤立用户”,所谓孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录。
 
 孤立帐户的产生一般是一下两种:
 1.将备份的数据库在其它机器上还原;
 2.重装系统或SQL SERVER之后只还原了用户库
 解决方法:
 在数据库的sysusers中删除xxx 使登录用户和数据库的孤立用户对应起来
 其实我们建立了同样名称的数据库登录用户后,数据库中的表我们照样不能使用时因为sid的不同,就是系统登录表和数据库用户表中的用户名相同,单是sid字段,数据库中的还是以前旧系统的sid值,所以我们就要把它对应成我们新建的,数据库靠sid来识别用户。
 这里可以使用存储过程sp_change_users_login。它有三种动作,分别是report,update_one和auto_fix。
 运行sp_change_users_login 'report',系统会列出当前数据库的孤立用户数。
 我们只需要选择当前数据库为testdb,然后运行
 sp_change_users_login 'update_one','test','test'
 系统就会提示修复了一个孤立用户。
 如果没有建立test的登录用户,还可以用
 sp_change_users_login 'Auto_Fix', 'test', NULL, 'testpassword'
 来创建一个登录用户名为test,密码为testpassword的用户与之对应。
 
 好了,到这里通常情况下,数据库对象得到访问问题已经解决了。如果有多个数据库中有同一个用户的数据表,只需要选择不同的数据库,执行update_one的那个就行了。
 转自:[url=]http://www.cnblogs.com/jamin/archive/2008/06/17/1223614.html[/url]
 ===================================================================================
 1. 查看某个数据库的孤立用户:
 USE 库名
 EXEC sp_change_users_login 'Report'
 2. 自动修复某个孤立用户:
 USE 库名
 EXEC sp_change_users_login 'Auto_Fix', '孤立用户名', NULL, '密码'
 --密码指用户对应的登录不存在时, 系统自动建立登录, 为登录分配的密码
 报错:
 服务器: 消息 8144,级别 16,状态 2,过程 sp_change_users_login,行 0
 为过程或函数 sp_change_users_login 指定的参数太多。
 --报错时候, 可删除“,'密码'”部分(版本或者补丁问题)
 3.表已经恢复完毕,有孤立用户 user1, 在登录中已建立登录用户 user2
 sp_change_users_login @Action = 'Update_One'
 , @UserNamePattern = 'user1'
 , @LoginName = 'user2'
 可将 user1 与 user2(以user2用户名登录) 关联
 翻译:
 **************************************************************************************************
 sp_change_users_login
 新增信息   -   SQL   Server   2000   SP3。
 
 将数据库中现有的用户映射到   Microsoft®   SQL   Server™   登录。
 
 语法
 sp_change_users_login   [   @Action   =   ]   'action'
 [   ,   [   @UserNamePattern   =   ]   'user'   ]
 [   ,   [   @LoginName   =   ]   'login'   ]
 [   ,   [   @Password   =   ]   'password'   ]
 
 参数
 [   @Action   =   ]   'action'
 
 描述此过程要执行的操作。action   的数据类型为   varchar(10),可以是下面的某个值。
 
 值   描述
 Auto_Fix   将当前数据库   sysusers   表中的用户条目链接到   sysxlogins   中同名的登录。应检查   Auto_Fix   语句的结果,确认实际中的链接正确。在对安全性较为敏感的情况下,要避免使用   Auto_Fix。
 使用   Auto_Fix   时,必须指定   user   和   password;login   必须为   NULL。user   必须是当前数据库中的有效用户。
 
 Report   列出当前数据库中未链接到任何登录的用户以及相应的安全标识符   (SID)。
 user、login   和   password   必须为   NULL   或不指定。
 
 Update_One   将当前数据库中指定的   user   链接到   login。login   必须已存在。必须指定   user   和   login。password   必须为   NULL   或不指定。
 
 
 [@UserNamePattern   =]   'user'
 
 是当前数据库中的   SQL   Server   用户的名称。user   的数据类型为   sysname,默认值为   NULL。
 
 [@LoginName   =]   'login'
 
 SQL   Server   登录的名称。login   的数据类型为   sysname,默认值为   NULL。
 
 [@Password   =]   'password'
 
 是指派给   Auto_Fix   创建的新   SQL   Server   登录的密码。如果已存在匹配的登录,将映射用户和登录并忽略   password。如果不存在匹配的登录,sp_change_users_login   将新建一个新的   SQL   Server   登录并将   password   指派为该新登录的密码。password   是   sysname,默认值为   NULL。
 
 返回代码值
 0(成功)或   1(失败)
 
 结果集
 列名   数据类型   描述
 UserName   sysname   登录名。
 UserSID   varbinary(85)   登录安全标识符。
 
 
 注释
 使用此过程将当前数据库中用户的安全帐户链接到登录。如果用户登录已更改,则使用   sp_change_users_login   将用户链接到新的登录,而不会丢失用户的权限。
 
 sp_change_users_login   只能用于   SQL   Server   登录;它不能用于   Windows   登录。
 
 login   不能为   sa,而   user   不能为   dbo、guest   或   INFORMATION_SCHEMA   用户。
 
 不能在用户定义的事务中执行   sp_change_users_login。
 
 权限
 任何   public   角色的成员均可执行带有   Report   选项的   sp_change_users_login。只有   sysadmin   固定服务器角色的成员才能指定   Auto_Fix   选项。只有   sysadmin   或   db_owner   角色的成员才能指定   Update_One   选项。
 
 示例
 A.   显示登录映射的当前用户的报告
 下面的示例生成当前数据库中的用户及其安全标识符的报告。
 
 EXEC   sp_change_users_login   'Report'
 
 B.   更改用户的登录
 下面的示例更改   pubs   数据库中的用户   Mary   与现有登录之间的链接,链接到新的登录   NewMary   上(使用   sp_addlogin   添加)。
 
 --Add   the   new   login.
 USE   master
 go
 EXEC   sp_addlogin   'NewMary'
 go
 
 --Change   the   user   account   to   link   with   the   'NewMary'   login.
 USE   pubs
 go
 EXEC   sp_change_users_login   'Update_One',   'Mary',   'NewMary'
 
 C.   自动将用户映射到登录(必要时新建一个新登录)
 下例显示如何使用   Auto_Fix   选项将现有的用户映射到同名的登录,或者如果不存在登录   Mary,则创建密码为   B3r12-36   的   SQL   Server   登录   Mary。
 
 USE   pubs
 go
 EXEC   sp_change_users_login   'Auto_Fix',   'Mary',   NULL,   'B3r12-36'
 go
 注:转自[url=]http://www.cnblogs.com/lanshh/archive/2007/04/23/724400.html[/url]
 
 
 |