在使用数据库的过程中,经常会碰到数据库迁移或者数据迁移的问题,或者有忽然的数据库损坏,这时需要从数据库的备份中直接恢复。但是,此时会出现问题,这里说明几种常见问题的解决方法。

本文链接:http://www.cnblogs.com/atree/archive/2011/03/08/sp_change_users_login_SQL_Server_2005_Single.html
一、孤立用户的问题
比如,以前的数据库的很多表是用户test建立的,但是当我们恢复数据库后,test用户此时就成了孤立用户,没有与之对应的登陆用户名,哪怕你建立了一个test登录用户名,而且是以前的用户密码,用该用户登录后同样没办法操作以前属于test的用户表。
这个问题有两种办法解决。
先说解决的前提条件。
首先,要用备份文件还原数据库,我们这里的数据库名为testdb,里面有属于用户test的用户表。这个很轻易了操作了,不多讲了,在企业治理器中很方便可以恢复。恢复后,就产生了孤立用户test。
然后,用sa用户或者具有DBA权限的用户登录,创建一个test数据库登录用户,密码随便设置了,也可以和以前的保持一致。我们用它来对应孤立的test用户。
下面就有两种操作方法了,第一种就是改变对象的属主,第二种就是使登录用户和数据库的孤立用户对应起来。先说第一种方法。
1、修改对象属主
就是将原本属于数据库用户test的用户表,修改为属于dbo的用户表;然后修改test登录用户的数据库为testdb,就可以直接使用test登录用户登录后对该数据库进行操作了。
使用的存储过程
sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'
参数说明
[ @objname = ] 'object'
当前数据库中现有表、视图、用户定义函数或存储过程的名称。object 是 nvarchar(776),没有默认值。假如架构及其所有者具有相同的名称,则 object 可由现有对象所有者限定,格式为 existing_owner.object。
[ @newowner=] 'owner '
将成为对象的新所有者的安全帐户的名称。owner 的数据类型为 sysname,没有默认值。owner 必须是可访问当前数据库的有效数据库用户、服务器角色、Microsoft Windows 登录名或 Windows 组。假如新所有者是没有对应数据库级主体的 Windows 用户或 Windows 组,则将创建数据库用户。
实例:
以下示例将 authors 表的所有者更改为 dbo。
EXEC sp_changeobjectowner 'authors', 'dbo';
GO
这个方法有个最大的缺点就是,当表的数量非常多,而且还有存储过程或者触发器之类的修改起来会非常麻烦,需要一个一个修改,所以,不提倡使用。现在网上有一个批量修改的存储过程,大家可以找一下,这里就不说了,而是教大家一个更简单的。
2、使登录用户和数据库的孤立用户对应起来
其实我们建立了同样名称的数据库登录用户后,数据库中的表我们照样不能使用时因为sid的不同,就是系统登录表和数据库用户表中的用户名相同,单是sid字段,数据库中的还是以前旧系统的sid值,所以我们就要把它对应成我们新建的,数据库靠sid来识别用户。

这里可以使用存储过程sp_change_users_login。它有三种动作,分别是report,update_one和auto_fix。
运行sp_change_users_login 'report',系统会列出当前数据库的孤立用户数。
我们只需要选择当前数据库为testdb,然后运行
sp_change_users_login 'update_one','test','test'
系统就会提示修复了一个孤立用户。
假如没有建立test的登录用户,还可以用
sp_change_users_login 'Auto_Fix', 'test', NULL, 'testpassword'
来创建一个登录用户名为test,密码为testpassword的用户与之对应。
好了,到这里通常情况下,数据库对象得到访问问题已经解决了。假如有多个数据库中有同一个用户的数据表,只需要选择不同的数据库,执行update_one的那个就行了。
二、对象名 ‘xxxx’ 无效的问题
这里可能会有人碰到对象名 ‘xxxx’无效的问题。系统表却不会产生这个问题,而用户表还要加上用户名,然后是表明才能访问,比如select * from author,会说对象名 author 无效,而用select * from test.author就可以访问,这个是用户首选身份的问题。
解决很简单,就是察看test登录用户是否具有dba的权限或者系统治理的权限,有的话去掉就行了。
因为假如用户有dba身份,那么它登陆后的默认表空间是dbo的系统表空间,所以去掉了之后,就会以正常的test表空间访问数据表了。

转自:http://www.whzz.org/database/SQLserver/20071115/33637_2.html

本文链接:http://www.cnblogs.com/atree/archive/2011/03/08/sp_change_users_login_SQL_Server_2005_Single.html

转载于:https://www.cnblogs.com/atree/archive/2011/03/19/sp_change_users_login_SQL_Server_2005_Single.html

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

  1. SQL server查询时找不到表,显示:对象名 ‘XXX‘ 无效。

    测试环境: SQLserver 2008 R2 用SQL查询语句时通常需要新建一个查询如下: 然后就会弹出个文件框: 在里面写入语句就可以进行查询了. 但是,明明我已经建立了学生表,执行的时候却不知道 ...

  2. [转贴]ASP.NET下对远程SQL SERVER数据库的备份和恢复的存储过程

    Sql server的帮助文档地址,在IE里面直接输入就行 mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Boo ...

  3. Sql Server数据库的备份和恢复措施

    Sql   Server数据库的备份和恢复措施 Sql   Server数据库的备份和恢复措施 一.备份数据库 1.打开SQL企业管理器,在控制台根目录中依次点开Microsoft   SQL   S ...

  4. SQL Server数据库mdf文件中了勒索病毒.FREEMAN。扩展名变为FREEMAN

    SQL,数据库,勒索病毒,mdf文件中毒,FREEMAN SQL Server数据库mdf文件中了勒索病毒.FREEMAN.扩展名变为FREEMAN ***.ldf.FREEMAN ***.mdf.F ...

  5. SQL Server数据库mdf文件中了勒索病毒BUNNY。扩展名变为BUNNY

    SQL Server数据库mdf文件中了勒索病毒BUNNY.扩展名变为BUNNY ***.ldf.BUNNY ***.mdf.BUNNY ***.ldf.BUNNY ***.mdf.BUNNY SQL ...

  6. SQL Server数据库mdf文件中了勒索病毒 mercury。扩展名变为 mercury

    2019-01-24 15:57:27 SQL,数据库,勒索病毒,mdf文件中毒,mercury *SQL Server数据库mdf文件中了勒索病毒.mdf.mercury.mercury SQL S ...

  7. SQL server之对象名 'xxx' 无效。

    今天在查询库名的时候碰见一个错误:对象名 'xxx' 无效. sql语句是这样:SELECT a.cAcc_Id, iyear,cacc_name,cDatabase             FROM ...

  8. 《SQL Server企业级平台管理实践》读书笔记——关于SQL Server数据库的备份方式...

    数据备份一直被认为数据库的生命,也就是一个DBA所要掌握的主要技能之一,本篇就是介绍SQL Server备份原则,SQL Server数据库分为数据文件和日志文件.为了使得数据库能够恢复一致点,备份不 ...

  9. SQL Server 数据库之备份和恢复数据库

    备份和恢复数据库 1. 概述 2. 备份类型 3. 恢复模式 3.1 简单恢复模式 3.2 完全恢复模式和大容量日志恢复模式 4. 备份数据库 5. 恢复数据库 1. 概述 在一些对数据可靠性要求很高 ...

最新文章

  1. 提高开源项目逼格-为你的github项目添加Travis CI
  2. 【BZOJ1433】【codevs2347】假期的宿舍,最大流
  3. 触控游戏的设计—Windows Phone 7游戏开发
  4. pyinstaller打包后闪现cmd黑色窗口解决方案
  5. 太原理工大学这两年程序设计等竞赛奖牌统计
  6. 21. Magento 创建新闻模块(2)
  7. 智能优化算法:象群算法-附代码
  8. [转载] 信息系统项目管理师教程——06 信息化基础知识
  9. Java 战国大富翁,中国古代八大富翁,比皇帝还有钱!其中三位是历史上公认的商圣...
  10. 计算机好多个页面,哪些电脑分屏软件好用?好用电脑分屏软件推荐
  11. 网络安全信息收集的思路
  12. 基于ROS的机器人模型建立及3D仿真【物理/机械意义】
  13. Java开发对接招行一网通支付功能的总结
  14. Openvpn搭建并使用用户名密码登录
  15. 【读书笔记】概率图模型——基于R语言(一)
  16. android 获取drawable 对象,Android 实现将本地资源图片转换成Drawable的方法
  17. MEMOS 服务及隐私协议
  18. [RaspberryPi] 一键部署树莓派Zero电子相框功能!
  19. 电感为什么是电压超前90度——问题整理
  20. 员工排班优化 员工排班 java 排班

热门文章

  1. STM32开发 -- UCOSII移植
  2. S5PV210开发 -- 前言
  3. Maven学习笔记(二)
  4. Android 6.0.1 Location Service 分析
  5. java字数统计_java统计字数
  6. mysql中jdbc的metadata_JDBC(九)DatabaseMetaData 数据库元数据
  7. ubuntu14.04安装完ros后常用的其他安装
  8. python 任务计划_使用Python添加计划任务
  9. 基于笛卡尔坐标系下的三边定位的研究(TOA方式定位)
  10. mysql设置不主动提交无效_关闭事务自动提交无效,回滚也无效