Sql-Server-2016
查找在執行時啟動 SQL 代理作業的使用者
我繼承了一個breakglass 過程,它允許某些使用者啟動一個SQL 代理作業,從而提高他們對實例的權限。
它目前發送一封電子郵件說它已被呼叫,等待4小時然後撤銷權限,發送一封電子郵件說它已被撤銷。
但我就是找不到方法來捕捉誰讓特工的工作開始了。
有沒有辦法可以擷取使用者 ID 詳細資訊,或者它總是會獲取 SQL 代理使用者詳細資訊?
這似乎在消息列下的 msdb.dbo.sysjobhistory 表中可用。
我們可以使用一些程式碼來提取基於“以使用者身份執行”文本的文本:
SELECT [j].[name] AS [JobName], CASE WHEN LEFT([h].[message], 17) = 'Executed as user:' THEN SUBSTRING([h].[message], 19, CHARINDEX('.', [h].[message], 1) - 18) WHEN [h].[message] LIKE '%invoked by%' THEN SUBSTRING( [h].[message], CHARINDEX('invoked by ', [h].[message]) + 11, CHARINDEX( '.', SUBSTRING( [h].[message], CHARINDEX('invoked by ', [h].[message]) + 11, 99 ) ) - 1 ) ELSE [h].[message] END, [h].[message] FROM [msdb].[dbo].[sysjobs] AS [j] INNER JOIN [msdb].[dbo].[sysjobhistory] AS [h] ON [j].[job_id] = [h].[job_id] WHERE [j].[enabled] = 1 --Only Enabled Jobs ORDER BY [JobName];