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

2024-04-17 01:32

本文主要是介绍解决还原数据库产生的孤立用户问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

孤立用户是指脱离了登录,独立存在于数据库中的用户  
关于孤立用户的产生原因及解决办法,参考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登录名'   
 

这篇关于解决还原数据库产生的孤立用户问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910451

相关文章

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField