解决还原数据库产生的孤立用户问题

转载 2007年09月11日 22:19:00
孤立用户是指脱离了登录,独立存在于数据库中的用户  
关于孤立用户的产生原因及解决办法,参考sql联机丛书"孤立用户"部分  
联机帮助上是删除孤立用户,但还有没有其他办法呢?  
   
   
   
  --在master中创建此存储过程,然后调用此存储过程即可(注意参数为要解决孤立用户的数据库名)  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_validatelogin]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_validatelogin]  
  GO  
   
  /*--解决还原数据库产生的孤立用户问题  
     
    孤立用户是指脱离了登录,独立存在于数据库中的用户  
    关于孤立用户的产生原因及解决办法,参考sql联机丛书"孤立用户"部分  
    联机帮助上是删除孤立用户  
   
    本存储过程通过另一方法来解决此问题:  
      搜索指定数据库中的系统表  
      如果孤立用户的登录已经存在,则通过修改系统表来重新建立登录与用户之间的联系  
      如果孤立用户的登录不存在,则为它建立一个登录      
   
    存储过程处理了两种情况:  
    一种情况是在还原数据库前已经创建了登录  
      但还原数据库后,无法用该登录访问还原的数据库  
    另一种情况是,当前sql实例中,没有还原数据库中的登录用户  
   
  --邹建   2004.07(引用请保留此信息)--*/  
   
  /*--调用示例  
     
    exec   p_validatelogin   'db_test'  
  --*/  
  create   proc   p_validatelogin  
  @dbname   sysname   --孤立用户所在的数据库名(存储过程自动搜索此库中的孤立用户进行解决)  
  as  
  if   db_id(@dbname)   is   null  
  begin  
    print   '无此数据库'  
    return  
  end  
   
  declare   @s   nvarchar(4000)  
   
  --更新已经有登录,但   sid   不匹配的用户的sid  
  set   @s='update   a   set   sid=b.sid  
  from   ['+replace(@dbname,']',']]')+'].dbo.sysusers   a    
    join   master.dbo.syslogins   b   on   a.name=b.name  
  where   a.islogin=1   and   a.sid<>b.sid'  
  exec   sp_configure   'allow   updates',1   reconfigure   with   override  
  exec   sp_executesql   @s  
  exec   sp_configure   'allow   updates',0   reconfigure   with   override  
   
  --为不存在的登录添加登录信息  
  set   @s='declare   @sid   binary(16),@loginame   sysname  
    declare   tb   cursor   local   for  
    select   name,sid   from   ['+replace(@dbname,']',']]')  
    +'].dbo.sysusers   a  
    where   islogin=1   and   name   not   in(''dbo'',''guest'')   and   not   exists(  
      select   1   from   master.dbo.syslogins  
      where   name=a.name)  
    open   tb  
    fetch   tb   into   @loginame,@sid  
    while   @@fetch_status=0  
    begin  
      exec   sp_addlogin   @loginame=@loginame,@sid=@sid  
      fetch   tb   into   @loginame,@sid  
    end  
    close   tb  
    deallocate   tb'  
    exec   sp_executesql   @s  
  go  
   
   
   
  先增加一个SQL   SERVER登录loginname,如果有就不要加了。  
   
  然后运行存储过程:  
  sp_change_users_login   'update_one','数据库用户名','SQL   SERVER登录名'   
 

数据库还原中的孤立用户问题

--*********************************************************** /* 下面的代码演示了孤立用户的产生过程。在代码中,产生创建了一个测试...
  • qiangwang799
  • qiangwang799
  • 2013年01月15日 12:39
  • 560

SQLServer 数据库还原中的孤立用户问题

--*********************************************************** /* 下面的代码演示了孤立用户的产生过程。在代码中,产生创建了一个测...
  • aking8736
  • aking8736
  • 2014年08月23日 22:26
  • 750

还原数据库时,还原孤立用户

SQL Server 2005/2008的解决办法 (SQL2005中,由于微软做了重大调整,正常情况下不允许对系统表进行即席更新操作,所以要采用和SQL 2000完全不同的操作手法) 孤立帐户,...
  • lishimin1012
  • lishimin1012
  • 2015年01月01日 12:40
  • 336

SQLServer解决孤立用户问题

SQLServer中存在两种用户:SQLServer登录用户、数据库用户。 在服务器实例上未定义或错误定义了其相应 SQL Server 登录名的数据库用户无法登录到实例。 这样的用户被称为此服务器实...
  • ascdfwsfrfadfg
  • ascdfwsfrfadfg
  • 2016年11月15日 15:26
  • 88

还原SQLServer2008数据库报用户无法登录

在一台新的服务器上还原mssql2008r2数据库后,原来数据库中的账户无法用来打开这台新还原的数据库, 报错:登录失败 错误代码:4064。 分析原因: 在备份数据库的时候,服务器引擎中的安全-...
  • Robinsone
  • Robinsone
  • 2015年03月13日 09:47
  • 1464

数据库还原不成功问题汇总

我们在工作中常常会因为要解决现场问题,而对现场数据库进行数据库备份和还原,下面就针对在实际工作我遇到的备份和还原问题,做以一个小结: 问题一: 1.无法获得对数据库独立访问权 如下图:造成此原因主要是...
  • tianwuya217
  • tianwuya217
  • 2013年03月20日 20:09
  • 6522

SQL Server数据库中还原孤立用户的方法集合

很多做DBA的朋友也许都会碰到一个这样的问题,在数据还原到其他服务器时,登录名会丢失,重建非常麻烦,特別是数据库用户较多的的情况,其实这个问题解决非常简单。...
  • jyf0412
  • jyf0412
  • 2014年08月26日 10:41
  • 468

生产计划排产软件如何解决生产难题?

很多生产型企业在生产计划排产环节,基本还靠手工方式在Excel中进行。而Excel表通常只能记录和修改事后数据,无法提前预测和快速应变,一旦业务量增大,或多工序并行,不仅功能满足不了需求,操作起来也十...
  • wy666222
  • wy666222
  • 2017年10月25日 13:38
  • 138

SQL Server 备份和还原的21个疑难问题解决办法

份和还原数据库和事务日志时可能会遇到下面的问题: 1.使用 BACKUP 语句或 RESTORE 语句时,会发生语法错误。该错误表明数据库是在 Microsoft® SQL Server™ 6.5...
  • hfit000
  • hfit000
  • 2013年05月21日 18:57
  • 741

访问数据库时如何解决并发问题

 在数据库访问时。如果处理并发访问的问题 或者当一个操作员对一个对象作读操作时。另一个操作员对此对象作写操作的时候 如何避免死锁发生 /**********  加锁   *******...
  • fengxu511
  • fengxu511
  • 2015年10月03日 09:36
  • 1099
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决还原数据库产生的孤立用户问题
举报原因:
原因补充:

(最多只允许输入30个字)