msdb 中的 EXECUTE AS OWNER 是否存在安全風險?
我的任務是創建一個允許非特權使用者啟動和停止 SQL Server 代理作業的系統。我正在使用要執行的構造等在數據庫的
dbo
模式中創建儲存過程。msdb``WITH EXECUTE AS OWNER``EXEC dbo.sp_start_job <JobID>;
指定具有執行模組中定義的操作所需的最低權限的登錄名或使用者。例如,除非需要這些權限,否則不要指定數據庫所有者帳戶。
在我的情況下,
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 的權限。