MSSQL恢復別人備份引起的問題解決!

          Posted on 2006-07-20 17:22 負人博客 閱讀(502) 評論(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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 26, comments - 5, trackbacks - 0, articles - 8

          Copyright © 負人博客

          主站蜘蛛池模板: 彩票| 青海省| 家居| 封开县| 嘉禾县| 莆田市| 巴中市| 丹阳市| 胶南市| 西峡县| 拉萨市| 龙川县| 西昌市| 宣威市| 阿拉尔市| 石林| 三穗县| 无棣县| 富裕县| 阿克陶县| 北碚区| 鹤壁市| 安平县| 洛隆县| 广元市| 罗源县| 剑川县| 五大连池市| 舒兰市| 眉山市| 佛学| 旌德县| 周口市| 尼木县| 游戏| 阿鲁科尔沁旗| 杭锦后旗| 泌阳县| 通海县| 东乡族自治县| 逊克县|