Sí, hay una manera
La tabla para almacenar los resultados del desencadenante
USE [SOME_DATABASE]
GO
CREATE TABLE [dbo].[ddl_objects_log](
[date] [datetime] NULL DEFAULT (getdate()),
[login_name] [nvarchar](128) NULL,
[nt_user_name] [nvarchar](128) NULL,
[program_name] [nvarchar](128) NULL,
[host_name] [nvarchar](128) NULL,
[text] [xml] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
El gatillo
USE [SOME_DATABASE]
GO
/****** Object: DdlTrigger [ddl_db_trigger] Script Date: 22/01/2015 13:41:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [ddl_db_trigger]
ON DATABASE
FOR CREATE_FUNCTION,
CREATE_PROCEDURE,
CREATE_TABLE,
CREATE_TRIGGER,
CREATE_VIEW,
ALTER_FUNCTION,
ALTER_PROCEDURE,
ALTER_TABLE,
ALTER_TRIGGER,
ALTER_VIEW,
DROP_FUNCTION,
DROP_PROCEDURE,
DROP_TABLE,
DROP_TRIGGER,
DROP_VIEW,
CREATE_INDEX,
ALTER_INDEX,
DROP_INDEX
AS
BEGIN
set nocount ON
insert into ddl_objects_log(login_name, nt_user_name, program_name, host_name, text)
select login_name, nt_user_name, program_name, host_name, EVENTDATA() from sys.dm_exec_sessions WITH(NOLOCK) where session_id=@@SPID
set nocount OFF
END
GO
ENABLE TRIGGER [ddl_db_trigger] ON DATABASE
GO
La consulta para auditar los resultados del desencadenante
USE [SOME_DATABASE]
GO
SELECT top 10
REPLACE(CONVERT(VARCHAR(250), text.query('data(/EVENT_INSTANCE/PostTime)')),'T', ' ') as modify_datetime,
CONVERT(VARCHAR(215), text.query('data(/EVENT_INSTANCE/EventType)')) as event_type,
CONVERT(VARCHAR(225), text.query('data(/EVENT_INSTANCE/ServerName)')) as server_name,
CONVERT(VARCHAR(225), text.query('data(/EVENT_INSTANCE/DatabaseName)')) as database_name,
CONVERT(VARCHAR(225), text.query('data(/EVENT_INSTANCE/ObjectType)')) as object_type,
CONVERT(VARCHAR(225), text.query('data(/EVENT_INSTANCE/ObjectName)')) as object_name,
CONVERT(VARCHAR(215), text.query('data(/EVENT_INSTANCE/UserName)')) as user_name,
Login_name,
CONVERT(VARCHAR(MAX), text.query('data(/EVENT_INSTANCE/TSQLCommand/CommandText)')) as command_text
FROM [SOME_DATABASE].[dbo].[ddl_objects_log]
where CONVERT(VARCHAR(225), text.query('data(/EVENT_INSTANCE/ObjectName)')) like '%SOME_STORED_PROCEDURE%'
order by date desc
GO
Otro DBA podría tener una opinión diferente, pero considero que tener esta información disponible es importante para un DBA.
FROM [SOME_DATABASE].[dbo].[ddl_objects_log]
... ¿Debo crear la tabla?Si tiene habilitado el rastreo predeterminado y no se ha reiniciado, puede usarlo para encontrar quién creó el SP
Click aquí para ampliar
Depende de por qué quiere saber si los objetos se crean / alteran o descartan. Puede usar la notificación de eventos para iniciar sesión y notificarle si siente que un usuario no autorizado crea / descarta o altera objetos. Asegúrese de tener los filtros adecuados en su lugar.
Para completar esta respuesta, quiero mencionar: ¿Qué información de evento puedo obtener de manera predeterminada de SQL Server? de Aaron Bertrand.
fuente
DATEADD(HH, -24, GETDATE())
si desea obtener resultados durante más de 24 horas.select * from sys.procedures where type = 'P' order by create_date desc
AND DatabaseID= 'the_Database_I_Want
, no me muestra nada, incluso conDATEADD(HH, -24, GETDATE())
comentarios. ¿Estoy haciendo algo mal?Llego tarde, pero "hago" cosas de seguridad y administración.
SÍ . Es importante tener o crear estos registros siempre que sea posible. Sin embargo, también es su responsabilidad, en mi opinión, no "abrir este cuadro" hasta que sea importante. En otras palabras, una vez más, en mi opinión, es su trabajo proporcionar el repositorio de datos, asegurarse de que sea seguro, asegurarse de que esté sintonizado ... y luego mantenerse alejado de los datos dentro a menos que se le llame específicamente míralo o a menos que sea necesario para lograr tu objetivo.
Mi opinión y mi punto de vista, pero he tratado con datos confidenciales y confidenciales durante muchos años y me he esforzado por casi nunca "abrir la caja", ya que esto degrada la confianza con los usuarios.
Ahora déjame tomar un camino diferente : ¿qué pasa si nadie puede descubrir rápidamente cómo responde el procedimiento a los casos límite? Lo que podría llevarnos a usted o a mí una hora para reflexionar puede llevar al autor unos minutos: "ah, claro, esto falla cuando ..."
fuente