Sql-Server

如何強制從我的數據庫中刪除使用者?

  • January 23, 2020

我正在對我們的開發數據庫進行乾淨備份,以便輕鬆地重新啟動數據庫。該數據庫有大約 200 個測試使用者,應該刪除以使其真正乾淨,但問題是我無法刪除其中任何一個。

當我執行如下命令時:

DROP USER [MyGarbageUser]

它提示我以下錯誤:

消息 15284,級別 16,狀態 1,第 5 行 數據庫主體已授予或拒絕對數據庫中的對象的權限,無法刪除。

這些使用者既不擁有該數據庫中的任何對象(據我所知)也不應該擁有。在網上搜尋了很多之後,我仍然無法找到解決方案。

如何強制從該數據庫中刪除 MyGarbageUser?

您嘗試刪除的使用者似乎扮演了授予者的角色,因此您需要在執行刪除使用者之前撤銷這些訪問權限。

嘗試執行以下命令首先獲取受讓人的詳細資訊:

select                     
    permission_name,                     
    state_desc,                     
    object_name(major_id) as securable,                     
    user_name(grantor_principal_id) as grantor                     
from sys.database_permissions                     
where grantee_principal_id = user_id('User Name to be dropped')    

接下來將使用以下方法查找有關設保人的詳細資訊:

select *                     
from sys.database_permissions                     
where grantor_principal_id = user_id ('User Name to be dropped');     

根據您從上述查詢中獲得的結果,您需要執行以下操作之一:

REVOKE VIEW DEFINITION ON USER::User Name to be dropped TO public                    
REVOKE CONTROL ON USER::User Name to be dropped TO public                    
REVOKE ALTER ON USER::User Name to be dropped TO public    

REVOKE ALTER ON USER::User Name to be dropped TO *grantee*            
REVOKE CONTROL ON USER::User Name to be dropped TO *grantee*            
REVOKE VIEW DEFINITION ON USER::User Name to be dropped TO *grantee*     

這只是一種可能性,可能有其他類型的訪問權限已被授予。因此,您需要檢查相同的內容並相應地執行撤銷。

您可以從以下論壇中找到更多此類範例:

https://ask.sqlservercentral.com/questions/24721/the-database-principal-has-granted-or-denied-permi.html

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/07b40291-6c4d-427e-a5e2-568df482c550/drop-user-fails-with-quotthe-database-principal-has-granted-or-denied-permissions-to-catalog?forum=sqlsecurity

https://stackoverflow.com/questions/41817820/how-to-solve-sql-server-error-15284-the-database-principal-has-granted

以上希望有所幫助。

引用自:https://dba.stackexchange.com/questions/253237