Sql-Server
將 sys.dm_exec_input_buffer 與 @@SPID 一起使用時出現權限錯誤
當我在 SQL Server 2016 或 Azure SQL DB 上執行這個 SQL 塊時:
--hello world SELECT event_info FROM sys.dm_exec_requests req CROSS APPLY sys.dm_exec_input_buffer(req.session_id, req.request_id) WHERE req.session_id = @@SPID
我收到此錯誤,然後是預期結果:
Msg 300, Level 14, State 1, Line 5 VIEW SERVER STATE permission was denied on object 'server', database 'master'. Msg 297, Level 16, State 1, Line 5 The user does not have permission to perform this action. --hello world SELECT event_info FROM sys.dm_exec_requests req CROSS APPLY sys.dm_exec_input_buffer(req.session_id, req.request_id) WHERE req.session_id = @@SPID
sys.dm_exec_input_buffer狀態的文件(強調我的):
在 SQL Server 上,如果使用者有 VIEW SERVER STATE 權限,使用者將看到 SQL Server 實例上所有正在執行的會話;否則,使用者將只能看到目前會話。
因此,根據文件,我可以訪問這些數據。那麼,為什麼會引發錯誤呢?
現在記錄在案:
文本:
在 SQL Server 上,如果使用者有 VIEW SERVER STATE 權限,使用者將看到 SQL Server 實例上所有正在執行的會話;否則,使用者將只能看到目前會話。
ℹ 重要
在沒有 VIEW SERVER STATE 權限(例如在觸發器、儲存過程或函式中)的情況下,在 SQL Server Management Studio 之外針對 SQL Server 執行此 DMV 會在 master 數據庫上引發權限錯誤。
在 SQL 數據庫上,如果使用者是數據庫所有者,則使用者將看到 SQL 數據庫上所有正在執行的會話;否則,使用者將只能看到目前會話。
ℹ 重要
在沒有所有者權限的情況下(例如在觸發器、儲存過程或函式中)在 SQL Server Management Studio 之外針對 Azure SQL 數據庫執行此 DMV 會在主數據庫上引發權限錯誤。
這做同樣的事情。獲取結果但也是權限被拒絕錯誤
select event_info FROM sys.dm_exec_input_buffer(@@spid, NULL)
這似乎是一個錯誤,因為文件說您應該能夠查看目前 spid 的資訊。它不應該出錯。
我發現了困難的方法。將其放入 proc 以檢索 event_info。proc執行並完成。Web 客戶端應用程序收到錯誤消息。