Sql-Server-2016

查找在執行時啟動 SQL 代理作業的使用者

  • June 19, 2019

我繼承了一個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];

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