Mssql批量修改权限

王朝mssql·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

今天恢复一个在别人机器备份的数据库到SQL SERVER,恢复后该数据库中有一个mooip用户,该用户是数据库所有者,很多表的所有者也是他,但安全性里的登录中没有该用户,删除不了该用户,提示“因为选定的用户拥有对象,所以无法除去该用户”!

具体解决方式如下:

1 如果是一张表有此问题,解决方式如下:

exec sp_changeobjectowner 'mooip.tablename', 'dbo'

这样就把tablename指定的表的所有者赋值给了dbo用户

2 如果所有表都存在此问题,这是就要编写存储过程实现批量修改了

IF OBJECT_ID('ChangeAll') IS NOT NULL Drop PROC ChangeAll

GO

Create PROCEDURE ChangeAll (

@old sysname,

@new sysname

)

AS

DECLARE @objname sysname

SET NOCOUNT ON

IF USER_ID(@old) IS NULL

BEGIN

RAISERROR ('The @old passed does not exist in the database', 16, 1)

RETURN

END

IF USER_ID(@new) IS NULL

BEGIN

RAISERROR ('The @new passed does not exist in the database', 16, 1)

RETURN

END

DECLARE owner_cursor CURSOR FOR

Select name FROM sysobjects Where uid = USER_ID(@old)

OPEN owner_cursor

FETCH NEXT FROM owner_cursor INTO @objname

WHILE (@@fetch_status <> -1)

BEGIN

SET @objname = @old + '.' + @objname

EXEC sp_changeobjectowner @objname, @new

FETCH NEXT FROM owner_cursor INTO @objname

END

CLOSE owner_cursor

DEALLOCATE owner_cursorz

GO

EXEC ChangeAll @old = 'mooip', @new = 'dbo'

这样就完成了批量修改权限的工作

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航