Sql-Server

msdb 中的 EXECUTE AS OWNER 是否存在安全風險?

  • April 28, 2016

我的任務是創建一個允許非特權使用者啟動和停止 SQL Server 代理作業的系統。我正在使用要執行的構造等在數據庫的dbo模式中創建儲存過程。msdb``WITH EXECUTE AS OWNER``EXEC dbo.sp_start_job <JobID>;

線上圖書主題說這EXECUTE AS是一個“最佳實踐”:

指定具有執行模組中定義的操作所需的最低權限的登錄名或使用者。例如,除非需要這些權限,否則不要指定數據庫所有者帳戶。

在我的情況下,EXECUTE AS OWNER表示[sa],因為這些模組在dbo架構中,在 msdb 數據庫中,該數據庫始終歸[sa].

我這樣做是否無意中造成了安全風險?

我沒有傳入任何可用於 SQL 注入攻擊的參數,因為唯一傳入的參數表示UNIQUEIDENTIFIER受影響的作業。

執行儲存過程的使用者EXECUTE AS OWNER除了我明確創建的數據庫角色的成員資格之外無權訪問 msdb 數據庫,GRANTs他們EXECUTE對儲存過程的權限。

該項目的條件之一是相關使用者不能以任何方式執行 SQL Server 代理 GUI 工具。這排除了讓他們成為內置SQLAgentUserRole角色的成員。我也不想修改dbo.sp_start_job等的權限,因為我試圖不修改 SQL Server 本身所依賴的任何內容(除了顯然將項目添加到 msdb 數據庫本身)。

有問題的程式碼在這裡

就其本身而言,不,您可能不會增加安全風險。只要除了系統管理員之外沒有人可以更改該程序,並且只要該程序唯一可以做的就是開始一項工作,我就沒有發現問題。

MSDB 被(並且應該被)標記為TRUSTWORTHY. 這意味著通過使用EXECUTE AS OWNER您可以模擬 SERVER 級別的權限。在這種情況下,因為這sa意味著您可以創建一個過程來授予另一個使用者 sysadmin。

這確實意味著您確實希望限制對 MSDB 的權限。

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