现在的位置: 首页 > 综合 > 正文

SQL备份还原无法登陆

2013年03月06日 ⁄ 综合 ⁄ 共 1692字 ⁄ 字号 评论关闭

一、.数据库还原后,没有还原用户名.

1。用下语句找到此用户的SID

select * from sysusers

 

 

2。添加用户

sp_addlogin [ @loginame = ] 'login'
    [ , [ @passwd = ] 'password' ]
    [ , [ @defdb = ] 'database' ]
    [ , [ @deflanguage = ] 'language' ]
    [ , [ @sid = ] sid ]
    [ , [ @encryptopt = ] 'encryption_option' ]

 

sp_addlogin 'user1','pass1','his',null,0x5C2CE4C80D9FD4118D7A00D0B7899D0F,null

 

 

二、SQL Server数据库恢复或迁移中有用户名但无登录名(孤立账户)的解决方法

 

 

  数据库还原后,有用户名而没有登陆名(此种原因可能是因为,此用户名别的数据也在使用)  
 案例分析:某个数据库的账户只有用户名(数据库用户)而没有登录名(安全性-登录中),是因为这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录,这即是“孤立账户”。 
  
 
解决方法:使用系统存储过程sp_change_users_login修复
 
1)在SQL Server Management Studio(或SQL查询分析器)中选定对应数据库后执行以下查询语句exec sp_change_users_login 'REPORT'列出当前数据库的孤立用户
 
2)在SQL Server Management Studio(或企业管理器)安全性-登录名下建立一个和原数据库相同的登录名,然后执行以下语句exec sp_change_users_login 'AUTO_FIX','用户名'可以自动将用户名所对应的登录名添加到syslogins中
运行成功后显示:通过更新用户而修复的孤立用户数目为 1。通过添加新登录然后更新用户而修复的孤立用户数目为 0。
 

使用“exec sp_change_users_login 'Update_ONE','用户名','登录名'”将用户名映射为指定的登录名。

 

 

 

三。

 首先删除login id 为healthuser的帐号,
 
    然后执行sql命令:select sid from sysusers where name='healthuser',记下此sid数值.

    再执行sql 命令: sp_addlogin 'healthuser','futian','TOPSKY',null,@sid,null 。
   

1. 当恢复第一个数据库后,我们常做的方法是将这个数据库的healthuser这个用户的SID查出来,
然后用sp_addlogin来向当前SQL服务中增加一个登陆用户。
创建成功后,当前服务就有了这个用户,该用户的SID可以在master库中的sysxlogins表里查看到。
2. 这时我们再想在该服务中恢复另一个数据库。当恢复完毕后,查看sysusers,可以看到healthuser的SID和本服务中的healthuser的SID号不同。
3. 这时,通过下面的SQL代码,可以将当前数据库的参数做修改:
       Use Master
       GO
       sp_configure 'allow updates', 1
       reconfigure with override
      GO
   该语句将当前数据库的参数“是否允许修改系统表”的值置1,即允许用户修改系统表
4. 然后将该数据库中sysusers这个表中healthuser的SID直接UPDATE成当前服务的SID。
update heping..sysusers  set sid = 0x3414B3813495D411A48A00E04C6B6787 where name ='healthuser'
5. 这时,用healthuser登陆,就可以同时操作两个已恢复的数据库了。
6. 同理,可以将所有的数据库都恢复到一个SQL SERVER服务里,并且公用用户healthuser。

 

抱歉!评论已关闭.