Posted on 2006-07-20 17:22
負人博客 閱讀(495)
評論(0) 編輯 收藏 所屬分類:
數據庫
問題描述:
?????? 我恢復別人備份在別的機器上的SQL數據庫到我的機器上的SQL SERVER,恢復后該數據庫中有一個mis用戶,該用戶是所有者,很多表的所有者也是他,但我的安全性里的登錄中沒有該用戶,我刪除不了該用戶,提示“因為選定的用戶擁有對象,所以無法除去該用戶”!
問題解決方式:
????? 1 如果是一張表有此問題,解決方式如下:
???????
???????exec sp_changeobjectowner mis.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_cursor
??????????? GO
EXEC ChangeAll @old = 'mis', @new = 'dbo'
這樣就完成了批量修改權限的工作
詳細信息請參考:http://www.itpub.net/429496.html