什麼可能導致 SQL Server 一開始拒絕執行 SP,但稍後允許它不更改權限?
一個使用者(Windows 登錄)剛剛抱怨他被拒絕執行一個程序。我去檢查並確認他有執行它的權限。我沒有改變任何東西(現在我是唯一一個擁有管理員權限的人,如果需要的話),經過兩次不成功的嘗試,他第三次嘗試執行 SP,它成功了。
我已將 XE 配置為擷取錯誤消息,它擷取了兩倍的錯誤程式碼 229:
對象“storedProcedureName”、數據庫“databaseName”、模式“schemaName”的 EXECUTE 權限被拒絕。
是否存在預期這種行為的任何情況?
Microsoft SQL Server 2014 (SP3-CU-GDR) (KB4535288) - 12.0.6372.1 (X64)
如果同時將 Windows 使用者帳戶添加到 Active Directory (AD) 組,並且該 AD 組有權執行該過程,則可能會創建這種情況,其中使用者無需更改 SQL Server 即可訪問過程.
還要讓網路管理員檢查使用者是否註銷並再次登錄。僅在登錄時分配組成員身份,因此如果使用者被添加到組中並且沒有註銷,他的令牌中將不會擁有該組成員身份。- 斯波里
另一個可能的根本原因是對儲存過程定義如何終止的誤解。以此為例:
CREATE OR ALTER PROCEDURE dbo.MyTestProc AS BEGIN SELECT result = 1; END GRANT EXECUTE ON dbo.MyTestProc TO [SomeUser];
這裡的目的是定義過程,然後授予它權限。
但是,第一次執行該批處理時,權限
dbo.MyTestProc
不會更改。第一次執行儲存過程本身時*,*通過EXEC dbo.MyTestProc
,將授予權限以允許[SomeUser]
執行該過程。創建該過程並授予其權限的更正批次將是:
CREATE OR ALTER PROCEDURE dbo.MyTestProc AS BEGIN SELECT result = 1; END GO GRANT EXECUTE ON dbo.MyTestProc TO [SomeUser];
GO
過程定義和語句之間的意思GRANT
是當你執行那個批處理時,過程將被創建並且授權將立即生效。如果 proc 定義不正確,如上所示,使用者可能無法執行它。如果您隨後以系統管理員身份執行 proc,則第一次執行它會授予他們訪問權限。