Sql-Server
數據庫上 db_owner 角色中的 SQL 登錄無法創建儲存過程
我通過從通用帳戶中刪除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 記錄。