Shunze 學園 >電腦資訊學系 >資料庫管理 > 《分享》刪不掉的資料庫使用者 哈囉,還沒有註冊或者登入。請你[註冊|登入]
« 上一篇主題 下一篇主題 » 顯示成列印模式 | 增加到我的最愛
發表新主題 發表回覆
作者
主題
shunze
工友伯伯


註冊日期: 2002 04
來自: 潮汐終止之地
文章: 2340

shunze 離線
《分享》刪不掉的資料庫使用者引用回覆 編輯/刪除文章 搜尋由  發表的其他文章 回報給版主 IP 位置 回此頁最上方

保哥 的網站上看到“SQL Server 安全性概論與無法刪除資料庫使用者的解決辦法”這篇,
突然想到以前在SQL婼T實有遇到過此現象。
打鐵趁熱,趕快到資料庫中挖寶吧∼

果不其然,對資料庫不是很熟的順子,
開出來的資料庫,果然就有這個現象存在。


由於這個使用者帳號設定了數個擁有的結構描述。


所以在刪除此帳號時,就會出現如保哥所說的帳號無法刪除的狀況。
資料庫主體在資料庫中擁有 結構描述 且無法卸除。錯誤碼為15138。


依照保哥提供的T-SQL來執行,也確實列出了這樣的關係。

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA




最後當然也是依保哥的教學,
將所有不該屬於此使用者的結構描述,移轉給預設帳號,解決了此鬧劇∼
ALTER AUTHORIZATION ON SCHEMA::[db_owner] TO [dbo]
ALTER AUTHORIZATION ON SCHEMA::[db_accessadmin] TO [db_accessadmin]
ALTER AUTHORIZATION ON SCHEMA::[db_securityadmin] TO [db_securityadmin]
ALTER AUTHORIZATION ON SCHEMA::[db_ddladmin] TO [db_ddladmin]
ALTER AUTHORIZATION ON SCHEMA::[db_backupoperator] TO [db_backupoperator]
ALTER AUTHORIZATION ON SCHEMA::[db_datareader] TO [db_datareader]
ALTER AUTHORIZATION ON SCHEMA::[db_datawriter] TO [db_datawriter]



♥順子老婆的網拍,請多關照∼

If you don't like something, change it.
If you can't change it, change your attitude.
Don't complain!




2013-09-24, 23:05 shunze 的個人資料 把 shunze 加入好友列表 發送Email給 shunze 瀏覽 shunze 的網站 MSN : shunze@gmail.com
shunze
工友伯伯


註冊日期: 2002 04
來自: 潮汐終止之地
文章: 2340

shunze 離線
使用者在資料庫中擁有結構描述,無法刪除引用回覆 編輯/刪除文章 搜尋由  發表的其他文章 回報給版主 IP 位置 回此頁最上方

很快的,就遇到保哥陳述的第二種狀況,
無法刪除資料庫使用者,因為此使用者在資料庫中擁有結構描述,所以無法刪除。



以指令查詢或到該資料庫→安全性→結構描述查看,都可看到此自訂的結構描述。

指令查詢

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA




SSMS檢視查看



雖然說我們知道這是因為欲刪除的使用者帳號“擁有”了自訂的結構描述,導致此使用者無法刪除,
但若要直接刪除此自訂的結構描述,則又會出現有物件在參考它,而無法刪除結構描述的錯誤;錯誤碼3729



因此我們必需先查出有哪些物件參考到此結構描述,
復原物件的參考結構描述為dbo後,才能刪除自訂的結構描述,然後刪除使用者帳號。

究竟有哪些物件在參考此結構描述?可用如下指令來查出。

SELECT schema_name(uid) as SCHEMA_NAME, * FROM sysobjects WHERE schema_name(uid) = '自訂的結構描述名稱'




查出參考的物件後,透過以下指令把這些物件的參考結構描述改回dbo,
就可以刪除此自訂的結構描述,最後再來刪除使用者。

ALTER SCHEMA dbo TRANSFER 自訂的結構描述名稱.物件

以回復物件 v_discount_attachments_counts 為例,語法如下
ALTER SCHEMA dbo TRANSFER crmctcsa.v_discount_attachments_counts




把所有物件的參考結構回復為dbo,自訂的結構描述不再有物件關聯後,
就可以成功刪除自訂的結構描述,再進一步把使用者帳號刪除。


萬一把參考結構描述改為dbo時,出現訊息15530,物件已存在的錯誤,該怎麼辦呢?



這種情況是因為該物件已有dbo的結構描述,
所以再把此自訂的結構描述轉給dbo時,就會出現物件已存在的重覆錯誤!



那該怎麼辦呢?

首先要確定的是,為什麼有這個自訂的結構描述?
這個自訂的結構描述是否真有其存在的必要??

如果它的存在確有其目的,
為了刪除使用者,而冒然刪除此結構描述實為不智之舉!

如果確定此結構描述沒有重要性,
那麼可以考慮把此結構描述的owner改為dbo,例如本例的結構描述crmctcsa。
ALTER AUTHORIZATION ON SCHEMA::[crmctcsa] TO [dbo]


自訂的結構描述不再綁著這個要刪除的使用者了,
這個使用者就可以刪除了∼



♥順子老婆的網拍,請多關照∼

If you don't like something, change it.
If you can't change it, change your attitude.
Don't complain!




2013-10-11, 18:52 shunze 的個人資料 把 shunze 加入好友列表 發送Email給 shunze 瀏覽 shunze 的網站 MSN : shunze@gmail.com
  « 上一篇主題 下一篇主題 »
發表新主題 發表回覆
跳到:

Powered by: Burning Board 1.1.1 2001 WoltLab GbR