SQL2000数据库还原之后的问题

时间:2021-09-08 20:39:20
     我新建了一个用户aaa,憨厚导入一个数据库,但是导入过后里面有这个aaa,我想把导入进来的这个hrn删除,但是因为有关联,删不掉,尝试了很多方法,都没有办法解决,由于这个问题,所有导入的数据库里面的存储过程前面都要加上这个aaa,才能运行,要不就提示找不到这个存储过程,我想删除之后,再把我新建的那个aaa权限上加上这个数据库?有没有高手能给解决一下啊。在2005里面可以删除aaa的关联。再2000 里面就是删不掉

9 个解决方案

#1


先删除数库里的用户,再删除登陆用户

#2


这就是2005里架构为啥要提出来的原因了
 2000里用户和架构基本是一回事
在2000里 所有的表、视图、存储过程微软官方建议是用dbo开头 

采用曲线救国方法
  新建一个数据库
导入这个数据库aaa 记住在导入时一定看目标表的开头

#3


你删除用户aaa后,直接批量修改表,过程,函数等的所属用户,

   declare @sql varchar(4000)
   set @sql=''
   select @sql=@sql+' exec sp_changeobjectowner '''+name+''',''dbo'''
   from sysobjects 
   where xtype in('U','V','P','TR','FN','IF','TF') 
   and status>=0 
   and uid=user_id('dbo')
   exec (@sql)

这样所有的用户对象所属用户都改为dbo

#4


sorry, 上面语句的用户写错了,下面对是
      declare   @sql   varchar(4000) 
      set   @sql='' 
      select   @sql=@sql+'   exec   sp_changeobjectowner   '''+name+''',''dbo''' 
      from   sysobjects   
      where   xtype   in('U','V','P','TR','FN','IF','TF')   
      and   status> =0   
      and   uid=user_id('aaa') --上面错了,应该是针对aaa用户
      exec   (@sql) 

这样所有的用户对象所属用户都改为dbo

#5


楼上的谢谢了,我不想批量修改,通过设置SQL里面的一些属性应该可以设置好的。但是忘记了怎么设置的了

#6


这就是2005里架构为啥要提出来的原因了 
  2000里用户和架构基本是一回事 
在2000里   所有的表、视图、存储过程微软官方建议是用dbo开头   

采用曲线救国方法 
    新建一个数据库 
导入这个数据库aaa   记住在导入时一定看目标表的开头
》》》》》》》》》》》》》》》》》》》》》》》》
    aaa是一个用户,每次导入之后就替换了我付给这个数据库的那个aaa用户,导致aaa没有登录名

#7


http://blog.csdn.net/zjcxc/archive/2006/07/03/870217.aspx
我只想帮忙,我懂得不多

#8


问题描述:

从别处copy来一个数据库DB,附加后,对象的所有者不是Admini,每次查询时必需写select * from Admini.***才能查到。有什么方法不用前面的Admini吗(在不修改所有者的前提下)?注:

已经在“安全性-登陆”下面也新建了一个Admini用户,默认数据库设置为DB,权限足够,但在查询分析器下用Admini登陆,查询时还是要写Admini前缀,否则就提示对象名无效

问题解决方法:

如果是用的是sql 2000的话,用某个用户登录, 不指定所有者的话, 访问对象的时候, 默认的所有者就是当前登录用户

如果是2005的话, 在数据的安全性--用户--右键你的用户admin--属性, 看看默认构架是什么, 这个默认架构决定当你访问对象时, 不指定所有者的话, 使用那个所有者(sql 2005中, owner变成构架了)

 

会导致与上面的说法不匹配的异常情况:

如果在数据库DB中,Admini是孤立用户的话,则情况会与上面描述的有出入(附加或者恢复数据库很容易出现孤立用户),即引用对象时必须指定所有者。孤立用户的表现是:只能创建Admini登录, 并通过服务器角色给其分配对DB的权限,或者是在DB中建立名称不是Admini的用户与登录关联。

要查询DB中的孤立用户情况,执行下面的语句:

USE DB
GO
EXEC sp_change_users_login 'Report'

解决孤立用户的方法:

解决这种异常只要解决掉孤立用户,在确定了Admini是孤立用户后,可以执行下面的语句来解决:

USE DB
GO

-- 修复孤立用户

EXEC sp_change_users_login 'Auto_Fix', 'Admin', NULL, '密码';  

    -- 这个密码是指, 如果没有事先建立admin 这个登录的话, sql自动创建登录时, 为该登录分配的密码

-- 授予在DB 中的相关权限

EXEC sp_addrolemember  'db_owner', 'Admin'
、、、、、、、、、、、、、、、、、、、
情况和上面说的一样,我进行第一步的时候查出来了
UserName   UserSID
aaa        OXFADD....

 我在进行USE DB

GO

 

-- 修复孤立用户

EXEC sp_change_users_login 'Auto_Fix', 'Admin', NULL, '密码';  

这一步的时候 ,就出现问题了。报错误
Server: Msg 8144, Level 16, State 2, Procedure sp_change_users_login, Line 0
Procedure or function sp_change_users_login has too many arguments specified.

感觉这个数据库倒进来的这个用户是解决不掉

#9


解决方法来了,终于找到了,下面是一个例子。

查看:
1、企业管理器->展开要查看的数据库->用户 ,会发现相应的用户没有对应的登录
2、在查询分析器中执行 EXECsp_change_users_login @Action='Report'

解决:
办法一、自动新增一个和用户名相同的登录帐户,并影射
EXEC sp_change_users_login 'Auto_Fix', 'U_tom'
--如:
EXEC sp_change_users_login 'Auto_Fix', 'HospComm'

EXEC sp_change_users_login 'Auto_Fix', 'UnitComm'

EXEC sp_change_users_login 'Auto_Fix', 'HDsoft'

办法二、新增一个登录帐户,然后将此登录帐户映射到孤立的用户
EXEC sp_addlogin 'L_tom'
--Change the user account to link with the 'L_tom' login.
--如:
EXEC sp_change_users_login 'Update_One', 'U_tom', 'L_tom'

#1


先删除数库里的用户,再删除登陆用户

#2


这就是2005里架构为啥要提出来的原因了
 2000里用户和架构基本是一回事
在2000里 所有的表、视图、存储过程微软官方建议是用dbo开头 

采用曲线救国方法
  新建一个数据库
导入这个数据库aaa 记住在导入时一定看目标表的开头

#3


你删除用户aaa后,直接批量修改表,过程,函数等的所属用户,

   declare @sql varchar(4000)
   set @sql=''
   select @sql=@sql+' exec sp_changeobjectowner '''+name+''',''dbo'''
   from sysobjects 
   where xtype in('U','V','P','TR','FN','IF','TF') 
   and status>=0 
   and uid=user_id('dbo')
   exec (@sql)

这样所有的用户对象所属用户都改为dbo

#4


sorry, 上面语句的用户写错了,下面对是
      declare   @sql   varchar(4000) 
      set   @sql='' 
      select   @sql=@sql+'   exec   sp_changeobjectowner   '''+name+''',''dbo''' 
      from   sysobjects   
      where   xtype   in('U','V','P','TR','FN','IF','TF')   
      and   status> =0   
      and   uid=user_id('aaa') --上面错了,应该是针对aaa用户
      exec   (@sql) 

这样所有的用户对象所属用户都改为dbo

#5


楼上的谢谢了,我不想批量修改,通过设置SQL里面的一些属性应该可以设置好的。但是忘记了怎么设置的了

#6


这就是2005里架构为啥要提出来的原因了 
  2000里用户和架构基本是一回事 
在2000里   所有的表、视图、存储过程微软官方建议是用dbo开头   

采用曲线救国方法 
    新建一个数据库 
导入这个数据库aaa   记住在导入时一定看目标表的开头
》》》》》》》》》》》》》》》》》》》》》》》》
    aaa是一个用户,每次导入之后就替换了我付给这个数据库的那个aaa用户,导致aaa没有登录名

#7


http://blog.csdn.net/zjcxc/archive/2006/07/03/870217.aspx
我只想帮忙,我懂得不多

#8


问题描述:

从别处copy来一个数据库DB,附加后,对象的所有者不是Admini,每次查询时必需写select * from Admini.***才能查到。有什么方法不用前面的Admini吗(在不修改所有者的前提下)?注:

已经在“安全性-登陆”下面也新建了一个Admini用户,默认数据库设置为DB,权限足够,但在查询分析器下用Admini登陆,查询时还是要写Admini前缀,否则就提示对象名无效

问题解决方法:

如果是用的是sql 2000的话,用某个用户登录, 不指定所有者的话, 访问对象的时候, 默认的所有者就是当前登录用户

如果是2005的话, 在数据的安全性--用户--右键你的用户admin--属性, 看看默认构架是什么, 这个默认架构决定当你访问对象时, 不指定所有者的话, 使用那个所有者(sql 2005中, owner变成构架了)

 

会导致与上面的说法不匹配的异常情况:

如果在数据库DB中,Admini是孤立用户的话,则情况会与上面描述的有出入(附加或者恢复数据库很容易出现孤立用户),即引用对象时必须指定所有者。孤立用户的表现是:只能创建Admini登录, 并通过服务器角色给其分配对DB的权限,或者是在DB中建立名称不是Admini的用户与登录关联。

要查询DB中的孤立用户情况,执行下面的语句:

USE DB
GO
EXEC sp_change_users_login 'Report'

解决孤立用户的方法:

解决这种异常只要解决掉孤立用户,在确定了Admini是孤立用户后,可以执行下面的语句来解决:

USE DB
GO

-- 修复孤立用户

EXEC sp_change_users_login 'Auto_Fix', 'Admin', NULL, '密码';  

    -- 这个密码是指, 如果没有事先建立admin 这个登录的话, sql自动创建登录时, 为该登录分配的密码

-- 授予在DB 中的相关权限

EXEC sp_addrolemember  'db_owner', 'Admin'
、、、、、、、、、、、、、、、、、、、
情况和上面说的一样,我进行第一步的时候查出来了
UserName   UserSID
aaa        OXFADD....

 我在进行USE DB

GO

 

-- 修复孤立用户

EXEC sp_change_users_login 'Auto_Fix', 'Admin', NULL, '密码';  

这一步的时候 ,就出现问题了。报错误
Server: Msg 8144, Level 16, State 2, Procedure sp_change_users_login, Line 0
Procedure or function sp_change_users_login has too many arguments specified.

感觉这个数据库倒进来的这个用户是解决不掉

#9


解决方法来了,终于找到了,下面是一个例子。

查看:
1、企业管理器->展开要查看的数据库->用户 ,会发现相应的用户没有对应的登录
2、在查询分析器中执行 EXECsp_change_users_login @Action='Report'

解决:
办法一、自动新增一个和用户名相同的登录帐户,并影射
EXEC sp_change_users_login 'Auto_Fix', 'U_tom'
--如:
EXEC sp_change_users_login 'Auto_Fix', 'HospComm'

EXEC sp_change_users_login 'Auto_Fix', 'UnitComm'

EXEC sp_change_users_login 'Auto_Fix', 'HDsoft'

办法二、新增一个登录帐户,然后将此登录帐户映射到孤立的用户
EXEC sp_addlogin 'L_tom'
--Change the user account to link with the 'L_tom' login.
--如:
EXEC sp_change_users_login 'Update_One', 'U_tom', 'L_tom'