SEOVIP学习社区

 找回密码
 注册
搜索
查看: 2066|回复: 0

关于SQL复原数据库后呈现孤立用户问题的处置

[复制链接]
  • TA的每日心情

    2012-11-6 18:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    xuxuqian 发表于 2012-8-22 23:37:18 | 显示全部楼层 |阅读模式

    运用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孤立用户处理方案

    表现
      当您将数据库备份康复到另一台服务器时,能够会遇到孤立用户的问题。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: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;
    --然后手动删去就可以了。

    ----------------------------------------------------------------------------------------------------------------
    [导入]sql2000备份的数据库复原到sql2005后,挑选“数据库联系图”提示:此数据库没有有用一切者,因而无法装置数据库联系图撑持目标"的处理办法
    sql2000备份的数据库复原到sql2005后,挑选“数据库联系图”提示:此数据库没有有用一切者,因而无法装置数据库联系图撑持目标。若要持续,请首要运用“数据库特点”对话框的“文件”页或 ALTER AUTHORIZATION 句子将数据库一切者设置为有用登录名,然后再增加数据库联系图撑持目标。
         
    处理办法如下:
    1、设置兼容等级为90(2005为90)
    USE [master]
    GO
    EXEC dbo.sp_dbcmptlevel @dbname='数据库名', @new_cmptlevel=90
    GO  
    或是选责你复原的数据库,点右键,选特点->选项->兼容等级,挑选sqlserver2005(90) 然后断定,
          这时,你在该数据库下翻开“数据库联系图”节点时会有个提示,"此数据库短少一个或多个运用数据库联系图所需的撑持目标,能否创立",挑选“是”即可。
    2、经过以上的办法操作,若是问题仍然存在的话,按下列办法持续
    挑选你的数据库,然后挑选"安全性"->"用户",挑选dbo,翻开特点页,如登录名为空的话,新建查询,然后
    use [你的数据库名]
    EXEC   sp_changedbowner   'sa'
    履行成功后,你再挑选"数据库联系图"节点,时提示 “此数据库短少一个或多个运用数据库联系图所需的撑持目标,能否创立",挑选“是”即可。 就可以看到原先建的联系图了。

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

    从服务器上作导入导出至本地机上,数据库中的表都在,可是表名前段的架构身份不是“dbo”了,而是服务器上数据库的“库名”。这样架构身份异样了,顺序运转就出问题了。试过单个修正表,在sql2005的特点窗口可以更改架构者,可是N多表哪儿能手动改得过来呀!还请高手点拨批量更改的办法。在此谢过。
    SQL   Server2005可以运用体系存储进程sp_changeobjectowner更改数据库目标的一切者。   
       
    sp_changeobjectowner   '目标名(包罗架构名)','新架构名'   
       
    批量修正请用:   
       
    办法一:运用游标   
       
    declare   @name   sysname   
    declare   csr1   cursor   
    for     
          select   TABLE_NAME   from   INFORMATION_SCHEMA.TABLES   
    open   csr1   
       
    FETCH   NEXT   FROM   csr1   INTO   @name   
    while   (@@FETCH_STATUS=0)   
          BEGIN   
    SET   @name='原架构名                  EXEC   SP_ChangeObjectOwner   @name,   '新架构名'   
        fetch   next   from   csr1   into   @name   
          END   
    CLOSE   csr1   
    DEALLOCATE   csr1   
       
    办法二:运用体系存储进程sp_MSforeachtable   
    EXEC   sp_MSforeachtable   @command1="EXEC   SP_ChangeObjectOwner   '?','新架构名'"
    ----------------------------------------------------------------------------------------------------------------
    在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]
    由老板影视http://www.dyboss.com收集整理看看a67影视http://www.kka67.com
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    小黑屋|手机版|Archiver|SEOVIP学习社区

    GMT+8, 2024-11-23 05:06 , Processed in 0.358741 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表