Sql-Server

數據庫上 db_owner 角色中的 SQL 登錄無法創建儲存過程

  • May 2, 2016

我通過從通用帳戶中刪除sysadmin權限開始在我們的測試環境中鎖定權限。幾個開發人員使用的第一個帳戶是本地 SQL 登錄。我為該帳戶賦予了數據庫中的db_owner角色。開發人員報告他不能再創建儲存過程。

我已經在這個特定的 SQL 2014 實例中驗證了這一點,我無法在其他任何地方重現它。我已經做了我能想到的一切來解決這個問題。我得到的最好的線索是我創建了一個新的 SQL 登錄名,並在同一個數據庫中給了它db_owner 。它也不能創建過程。原始登錄無法在其他使用者數據庫中創建過程,即使它具有db_owner

嘗試創建一個過程會給出:

消息 262,級別 14,狀態 18,過程 TheProcedure,第 30 行

CREATE PROCEDURE 權限在數據庫“DBTest”中被拒絕。

錯誤消息是正確CREATE PROCEDURE的,即使在我明確分配後也不會顯示給使用者。使用者可以更改任何程序。UDF 創建得到類似的錯誤:

數據庫中的 CREATE FUNCTION 權限被拒絕…

有人知道會發生什麼嗎?

當我做一個:

select * from fn_my_permissions(null, 'DATABASE')

CREATE PROCEDURE未列出。我檢查了 sys.permissions 中的任何DENY內容*,*沒有。

以下查詢:

SELECT * FROM fn_my_permissions('xyz', 'USER');

返回:

IMPERSONATE, VIEW DEFINITION, ALTER, CONTROL

有趣的一個 - 很難把這個固定下來。你有沒有想過看公共角色?

sp_helprotect ‘CREATE PROCEDURE’,NULL,NULL,’s’

這有什麼讓你回來的嗎?

與繞過檢查的 sysadmin 不同,內置的數據庫角色並沒有那麼特殊,以至於它們不能被 DENY 覆蓋。

嘗試查看 Exec sp_helpprotect Null, ‘Username’ 並查看顯示的 DENY 記錄。

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