SQL孤立用户解决方案

解决

PRB:联机丛书中的“孤立用户疑难解答”主题不完整
文章 ID : 274188
最后更新日期 : 2004年5月31日
版本 : 1.0
本页内容
 症状
 状态
 更多信息
 参考
症状
当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。

本文介绍了如何解决孤立用户问题。
状态
Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中存在的问题。
更多信息
虽然术语“登录”和“用户”经常交换使用,但它们之间有很大的不同。登录用于用户身份验证,而数据库用户帐户用于数据库访问和权限验证。登录通过安全识别符 (SID) 与用户关联。访问 SQL Server 服务器需要登录。验证特定登录是否有效的过程称为“身份验证”。登录必须与 SQL Server 数据库用户相关联。您使用用户帐户控制数据库中执行的活动。如果数据库中不存在针对特定登录的用户帐户,使用该登录的用户即使能够连接到 SQL Server 服务器,也无法访问数据库。但是,该情形的唯一例外是当数据库包含“guest”用户帐户时。与用户帐户不关联的登录将被映射到 guest 用户。相反,如果存在数据库用户,但没有与其关联的登录,则该用户将无法登录到 SQL Server 服务器中。

将数据库恢复到其他服务器时,数据库中包含一组用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户。这种情况被称为存在“孤立用户”。
孤立用户疑难解答
当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。以下情形说明了该问题并阐述如何加以解决。 1. 向主数据库添加一个登录,并将默认数据库指定为 Northwind: Use master go sp_addlogin 'test', 'password', 'Northwind'
      
 
2. 向刚创建的用户授予访问权限: Use Northwind go sp_grantdbaccess 'test'
      
 
3. 备份数据库。 BACKUP DATABASE Northwind
TO DISK = 'C:\MSSQL\BACKUP\Northwind.bak'
      
 
4. 将数据库恢复到其他 SQL Server 服务器: RESTORE DATABASE Northwind
FROM DISK = 'C:\MSSQL\BACKUP\Northwind.bak'
      
恢复的数据库包含名为“test”的用户,但没有相应的登录,这就导致“test”成为孤立用户。
5. 现在,为了检测孤立用户,请运行此代码: Use Northwind go sp_change_users_login 'report'
      
输出中列出了所有登录,其中包含 Northwind 数据库的 sysusers 系统表和主数据库的 sysxlogins 系统表中不匹配的条目。

解决孤立用户问题的步骤
1. 为前一步中的孤立用户运行以下命令:
Use Northwind
go
sp_change_users_login 'update_one', 'test', 'test'
      
这样,就将服务器登录“test”与 Northwind 数据库用户“test”重新连接起来。sp_change_users_login 存储过程还可以使用“auto_fix”参数对所有孤立用户执行更新,但不推荐这样做,因为 SQL Server 会尝试按名称匹配登录和用户。大多数情况下这都是可行的;但是,如果用户与错误登录关联,该用户可能拥有错误的权限。
2. 在上一步中运行代码后,用户就可以访问数据库了。然后用户可以使用 sp_password 存储过程更改密码: Use master
go
sp_password NULL, 'ok', 'test'
      
此存储过程不能用于 Microsoft Windows NT 安全帐户。通过 Windows NT 网络帐户连接到 SQL Server 服务器的用户是由 Windows NT 授权的;因此,这些用户只能在 Windows NT 中更改密码。

只有 sysadmin 角色的成员可以更改其他用户的登录密码。

参考
有关在服务器之间移动数据库时如何解决权限问题的其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章:
240872 INF:在 SQL 服务器之间移动数据库时如何解决权限问题

时间: 2024-08-03 22:49:17

SQL孤立用户解决方案的相关文章

理解和处理SQL Server数据库中的孤立用户

问题 把数据库从一个服务器实例附加和恢复到另一个实例中是数据库管理 员执行的常见的任务.附加或者恢复一个数据库之后,之前在数据库中创建和配 置的登录名已经不能访问了.这个问题最常见的症状是应用程序会遇到登录失败 的错误,或者是当你试着把登录名添加到数据库中时,你可能会得到一个信息比 如这个用户已经在这个数据库中存在.当你执行一个附加或者一个恢复时,这是 很常见的一种情况,那么你如何解决这个问题呢? 专家解答 当数据 库从一个服务器迁移到另一个服务器时,存储在主从数据库中的登录名ids与存储 在每

SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法

server|备份|错误|对象|解决|数据|数据库 介绍SQL Server 数据库使用备份还原造成的孤立用户和对象名'xxx'无效的错误的解决办法          在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备份中直接恢复.但是,此时会出现问题,这里说明几种常见问题的解决方法.一.孤立用户的问题比如,以前的数据库的很多表是用户test建立的,但是当我们恢复数据库后,test用户此时就成了孤立用户,没有与之对应的登陆用户名,哪怕你建立

Sql Server2000孤立用户解决方法

server|解决 Sql Server2000孤立用户解决方法关键词: 孤立用户                                          把数据库备份还原到另一个服务器时,可能会遇到孤立用户的问题.下面列出了MS的方法(来自帮助)和自己的方法方法一: 孤立用户疑难解答把数据库备份还原到另一个服务器时,可能会遇到孤立用户的问题.下面的方案显示并解决了这个问题: 通过执行 sp_addlogin,把登录 janetl 改名为 dbo. sp_addlogin 'janet

SQL Server解决孤立用户浅析

孤立用户概念        所谓孤立用户即指在服务器实例上未定义或错误定义了其相应 SQL Server 登录名的数据库用户无法登录到实例. 这样的用户被称为此服务器实例上的数据库的"孤立用户". 如果删除了对应的 SQL Server 登录名,则数据库用户可能会变为孤立用户. 另外,在数据库还原或附加到 SQL Server 的其他实例之后,数据库用户也可能变为孤立用户. 如果未在新服务器实例中提供数据库用户映射到的 SID,则该用户可能变为孤立用户 检测孤立用户 检测孤立用户相当简

用sp_change_users_login消除Sql Server的孤立用户

孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录. 孤立帐户的产生一般是一下两种:1.将备份的数据库在其它机器上还原从另一个服务器恢复数据库,登录是独立的创建的(不是从其它服务器复制过来的),这个时候创建的就是孤儿用户.2.重装系统或SQL SERVER之后只还原了用户库 解决方法是使用sp_change_users_login来修复.sp_change_users_login的用

SQL数据库用户只有“名称”而无“登陆名”解决

exec  sp_change_users_login  'UPDATE_ONE',没有登陆名的数据库用户,'新的登陆名'  go   原因: SQL备份的问题有一台SQL SERVER 服务器,将其中的数据库DataBase1备份成一个文件,在另外一台SQL SERVER服务器上还原,数据表和存储过程等恢复没有问题,但某些用户自定义的用户(这些自定义用户在原数据库中是某些表和存储过程的所有者)变成孤立用户,既无法利用也不能删除,导致不能利用这些用户帐号访问数据库. 解决方法: 1) 数据库还原

jsp-[Microsoft][ODBC SQL Server Driver][SQL Server]用户 'huyaozhong' 登录失败。18456

问题描述 [Microsoft][ODBC SQL Server Driver][SQL Server]用户 'huyaozhong' 登录失败.18456 <% String url = "jdbc:odbc:Temdata"; String username = "huyaozhong"; String password = "123456"; Connection con = null; try{ out.println("

SQL 给用户权限的问题

问题描述 SQL 给用户权限的问题 开始我用默认用windows登录了进来,建了一个test数据库里面有表student. 然后新建了一个登录me,在me下新建了一个数据库UserData在UserData添加了架构medbo: 并给该数据库添加了用户mename给mename默认架构medbo数据库角色为dbo_datawriter ①现在我用me登录,在UserData下新建表st它的架构是medbo,它确实无法访问我的test数据库下面的student表,但是那现在为什么我可以访问st表呢

MSSQL2005错误21002:[SQL-DMO]用户”xxx”已经存在之删除孤立用户

MSSQL2005迁移数据库后,新建相同用户名的时候出现错误提示:"错误21002:[SQL-DMO]用户"xxx"已经存在" 产生原因: 这就是我们通常所说的"孤立用户",所谓孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录. 孤立帐户的产生一般是一下两种: 1.将备份的数据库在其它机器上还原: 2.重装系统或SQL SERVER