SqlServer2000孤立用户解决方案

 当数据库从一个地方还原到另一个地方时会出现孤立用户问题。孤立用户简单来说就是在原来数据库上的用户到了新的数据库中就找不到登录用户了。即使你建一个一模一样的登录用户,也没法与旧的用户对应上,因为sqlserver中用户是通过SID去标识一个用户的,而不是用户名。这时如果你想删掉旧用户也是办不到的,因为旧用户会占有一些对象,例如表,存储过程等,这些东西令你无法删掉它。

    因此我们应该先想办法把旧用户给干掉。先在要操作的数据库中建立如下存储过程,代码如下:


Create PROCEDURE ChangeAllObjOwner (
@oldowner sysname,
@newowner sysname
)
AS
DECLARE @objname sysname
SET NOCOUNT ON

--检查旧用户是否存在
IF USER_ID(@oldowner) IS NULL
BEGIN
RAISERROR ('The @oldowner passed does not exist in the database', 16, 1)
RETURN
END
--检查新用户是否存在
IF USER_ID(@newowner) IS NULL
BEGIN
RAISERROR ('The @newowner passed does not exist in the database', 16, 1)
RETURN
END

DECLARE owner_cursor CURSOR FOR
Select name FROM sysobjects Where uid = USER_ID(@oldowner)

OPEN owner_cursor
FETCH NEXT FROM owner_cursor INTO @objname
WHILE (@@fetch_status <> -1)
BEGIN
SET @objname = @oldowner + '.' + @objname
EXEC sp_changeobjectowner @objname, @newowner
FETCH NEXT FROM owner_cursor INTO @objname
END

CLOSE owner_cursor
DEALLOCATE owner_cursor

GO

然后转到查询分析器,执行以上存储过程:

exec ChangeAllObjOwner 'olduser','dbo'

     建议把对象都转成是dbo的,也就是sa帐号下的,这时候就可以删除旧用户了。然后再建一个新的登录用户,对应回数据库,然后可以再执行一次上述的存储过程,把数据sa的对象转给新用户。

      在转移对象时会有一定的风险,但这种风险还是可以接受的,至少我到目前为止也没遇到对象被损坏的情况,大家不妨试试。


<本文系转载自: http://gdnpc.w247.dns911.cn/article.asp?id=21
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值