SQL还原数据库后孤立用户问题处理

本文介绍 SQL Server 中孤立用户的产生原因及修复方法,包括使用 sp_change_users_login 存储过程的不同方式来解决此类问题。

        所谓孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录

 

        孤立帐户的产生一般是一下两种:
        1.将备份的数据库在其它机器上还原;
        2.重装系统或SQL SERVER之后只还原了用户库

 

        解决方法是使用sp_change_users_login来修复

                sp_change_users_login的用法有三种

        用法1:
                exec sp_change_users_login 'REPORT'

                列出当前数据库的孤立用户

        用法2:
                exec sp_change_users_login 'AUTO_FIX','用户名'

                可以自动将用户名所对应的同名登录添加到syslogins中

        用法3:
                exec sp_change_users_login 'UPDATE_ONE','用户名','登录名'
        将用户名映射为指定的登录名

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------


SQL孤立用户解决方案参考:http://support.microsoft.com/kb/274188

 

症状

        当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤,本文介绍了如何解决孤立用户问题

 

        虽然术语登录和用户经常交换使用,但它们之间有很大的不同登录用于用户身份验证,而数据库用户帐户用于数据库访问和权限验证登录通过安全识别符 (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:MSSQLBACKUPNorthwind.bak'

        4. 将数据库恢复到其他 SQL Server 服务器: RESTORE DATABASE Northwind
                FROM DISK = 'C:MSSQLBACKUPNorthwind.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 角色的成员可以更改其他用户的登录密码
--------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

SQL2005删除用户的时候,产生数据库主体在该数据库中拥有架构,无法删除的解决办法

--执行如下SQL语句

ALTER   AUTHORIZATION   ON   SCHEMA::db_owner   TO   dbo;
--然后手动删除就可以了


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在sql server 2005数据库中更改数据架构

        在数据库testDB中存在架构A及用户A,现将testDB数据库所属的用户由A改为B,同时删除用户A;架构也由A改为B,删除架构A,操作如下:

        1、创建用户B,再创建架构B;
        2、将架构A的权限赋给用户B,取消用户A拥有架构A的权限,删除用户A;
        3、将数据库的所有属于架构A的对象改为架构B,代码如下:
                ALTER SCHEMA [新架构名] TRANSFER 旧架构名.[数据库中的对象表或视图或存储过程]

                ALTER SCHEMA [B] TRANSFER A.[对象1]
                ALTER SCHEMA [B] TRANSFER A.[对象2]
                ALTER SCHEMA [B] TRANSFER A.[对象n]
        4、删除架构A

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值