To Log Who Created a Job and Renamed a Job
automation #agent-job#automation
USE [msdb]
GO
/****** Object: Table [dbo].[JobChanges] Script Date: 01-04-2023 03:46:42 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[JobChanges](
[JobChangeID] [int] IDENTITY(1,1) NOT NULL,
[JobName] [varchar](100) NOT NULL,
[OldJobName] [varchar](100) NULL,
[ChangeType] [varchar](20) NOT NULL,
[ChangeTime] [datetime] NOT NULL,
[LoginName] [varchar](100) NOT NULL,
[JobOwner] [varchar](100) NOT NULL,
)
-------------------------------------------------------
CREATE TRIGGER track_job_changes
ON msdb.dbo.sysjobs
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
DECLARE @loginName VARCHAR(100) = SUSER_SNAME();
DECLARE @sqlText NVARCHAR(MAX) = NULL;
IF EXISTS (SELECT * FROM inserted)
BEGIN
-- Job created or updated
INSERT INTO dbo.JobChanges (JobName, OldJobName, ChangeType, ChangeTime, LoginName, JobOwner )
SELECT name, NULL, CASE WHEN EXISTS (SELECT * FROM deleted) THEN 'Updated' ELSE 'Created' END, GETDATE(), @loginName, SUSER_SNAME(owner_sid)
FROM inserted
WHERE NOT EXISTS (SELECT * FROM deleted);
END
ELSE IF EXISTS (SELECT * FROM deleted)
BEGIN
-- Job deleted
INSERT INTO dbo.JobChanges (JobName, ChangeType, ChangeTime, LoginName, JobOwner)
SELECT name, 'Deleted', GETDATE(), @loginName, SUSER_SNAME(owner_sid)
FROM deleted;
END
-- Check if any job has been renamed
IF EXISTS (SELECT * FROM deleted d INNER JOIN inserted i ON d.job_id = i.job_id WHERE d.name <> i.name)
BEGIN
-- Job renamed
INSERT INTO dbo.JobChanges (JobName, OldJobName, ChangeType, ChangeTime, LoginName, JobOwner)
SELECT i.name, d.name, 'Renamed', GETDATE(), @loginName, SUSER_SNAME(i.owner_sid)
FROM deleted d INNER JOIN inserted i ON d.job_id = i.job_id WHERE d.name <> i.name;
END
END