Files
sql-scripts/TPDT-268 - ACP in task sequence/dba_storedProcedures/mon_DDL_Audit_Alerts.sql
2024-03-07 16:52:14 +01:00

129 lines
4.8 KiB
Transact-SQL

USE [HCITools]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mon_DDL_Audit_Alerts]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[mon_DDL_Audit_Alerts]
GO
USE [HCITools]
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[mon_DDL_Audit_Alerts]
@in_debug tinyint = 0
AS
/*=============================================================================
Explication du traitement realise par la SP
-------------------------------------------
La SP va rechercher les modifications de DDL dans [master].[dba].[DDL_audit]
Contexte d'utilisation
----------------------
Appelé depuis le job D92120 - DDL Audit Alerts
Parametres
----------
@in_debug : non utilisé
Creation : 13.04.21 / RTC
Modifications : 11.08.2021 / spe : #TFS65583# Migrate personal email address from [hcisolutions.ch] to [galenica.com]
=============================================================================*/
SET QUOTED_IDENTIFIER ON
DECLARE @subject NVARCHAR(MAX),
@html_msg NVARCHAR(MAX),
@html_table NVARCHAR(MAX)
/* Run only on centrals Validation and Dev */
IF NOT EXISTS (SELECT 1 FROM [master].[cfg].[InstanceContext] WHERE [Business] = 'TPCENT' AND [TYPE] in ('DEVE','VALI'))
RETURN
BEGIN TRY
/* Formatage du message et envoi */
SELECT @subject = @@SERVERNAME + ' - DDL Audit'
SET @html_table = N''
SELECT @html_table = @html_table + '<tr style="color:black;background-color:white;">' +
'<td>' + DA_Host_Name + '</td>' +
'<td>' + ISNULL(SPID,'') + '</td>' +
'<td>' + ISNULL(DatabaseName,'') + '</td>' +
'<td>' + ISNULL(SchemaName,'') + '</td>' +
'<td>' + ISNULL(ObjectName,'') + '</td>' +
'<td>' + ISNULL(EventType,'') + '</td>' +
'<td>' + DA_App_Name + '</td>' +
'<td>' + CONVERT(NVARCHAR(25),PostTime) + '</td>' +
'</tr>'
FROM (SELECT DA_Host_Name,
DA_Event_Xml.value('(./EVENT_INSTANCE/SPID)[1]','NVARCHAR(MAX)') AS SPID,
DA_Event_Xml.value('(./EVENT_INSTANCE/PostTime)[1]','NVARCHAR(MAX)') AS PostTime,
DA_App_Name,
DA_Event_Xml.value('(./EVENT_INSTANCE/EventType)[1]','NVARCHAR(MAX)') AS EventType,
DA_Event_Xml.value('(./EVENT_INSTANCE/DatabaseName)[1]','NVARCHAR(MAX)') AS DatabaseName,
DA_Event_Xml.value('(./EVENT_INSTANCE/SchemaName)[1]','NVARCHAR(MAX)') AS SchemaName,
DA_Event_Xml.value('(./EVENT_INSTANCE/ObjectName)[1]','NVARCHAR(MAX)') AS ObjectName
FROM [master].[dba].[DDL_audit]
WHERE ISNULL(DA_App_Name,'') NOT IN ('SQLCMD','.Net SqlClient Data Provider',
'ActivePharmacy.ArizonaServerService',
'ActivePharmacy.ActivePosClientService',
'ActivePharmacyStock',
'Microsoft® Windows® Operating System',
'SQLAgent - Initial Boot Probe',
'SQLAgent - Enabling/disabling Agent XPs',
'Microsoft SQL Server',
'APS® TriaOne-Cash'
)
AND DA_App_Name not like 'SQLAgent - TSQL%'
AND ISNULL(DA_Event_Xml.value('(./EVENT_INSTANCE/DatabaseName)[1]','NVARCHAR(MAX)'),'') NOT IN ('tempdb','ArizonaCUST','master','PharmIndexTP')
AND DA_Event_Xml.value('(./EVENT_INSTANCE/PostTime)[1]','NVARCHAR(MAX)') > GETDATE()-1
) AS myEventsTable
GROUP BY DA_Host_Name,
SPID,
DA_App_Name,
EventType,
DatabaseName,
SchemaName,
ObjectName,
PostTime
ORDER BY DA_Host_Name,
DatabaseName,
SchemaName,
ObjectName,
PostTime ASC
IF @@ROWCOUNT > 0
BEGIN
SET @html_msg =
N'<H3><font color="Black">DDL Audit by SQL operators</H3>' +
N'<table border="1" align="left" cellpadding="2" cellspacing="0" style="color:white;font-family:arial,helvetica,sans-serif;text-align:center;" >' +
N'<tr style ="font-size: 14px;font-weight: normal;background:black;">
<th>Host Name</th>
<th>SPID</th>
<th>Database Name</th>
<th>Schema Name</th>
<th>Object Name</th>
<th>Event Type</th>
<th>Application Name</th>
<th>Post Time</th>
</tr>' + @html_table + N'</table>'
EXEC msdb.dbo.sp_send_dbmail @recipients= 'laurent.perroud@galenica.com;raphael.mognetti@galenica.com',
@subject = @subject,
@body = @html_msg,
@body_format = 'HTML' ;
END
END TRY
BEGIN CATCH
/* Traitement des erreurs (avec RaiseError) */
EXEC dbo.get_Error_Info @in_RaiseError = 1
END CATCH