Tak, jest sposób
Tabela do przechowywania wyników wyzwalacza
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
Spust
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
Kwerenda do kontroli wyników wyzwalacza
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
Inny DBA może mieć inne zdanie, ale uważam, że dostępność tych informacji jest tak ważna dla DBA.
FROM [SOME_DATABASE].[dbo].[ddl_objects_log]
... Czy powinienem stworzyć stół?Jeśli masz włączone śledzenie domyślne i nie zostało ono przeniesione, możesz użyć go do ustalenia, kto utworzył dodatek SP
Kliknij tutaj, aby powiększyć
To zależy od tego, dlaczego chcesz wiedzieć, czy obiekty są tworzone, zmieniane czy upuszczane. Możesz użyć powiadomienia o zdarzeniu do zarejestrowania się i powiadomienia, jeśli uważasz, że obiekty zostały utworzone / upuszczone lub zmienione przez nieautoryzowanego użytkownika. Upewnij się, że masz odpowiednie filtry w miejscu.
Aby uzyskać kompletność tej odpowiedzi, chcę wspomnieć - Jakie informacje o zdarzeniu mogę domyślnie uzyskać z programu SQL Server? od Aarona Bertranda.
źródło
DATEADD(HH, -24, GETDATE())
jeśli chcesz otrzymywać wyniki przez ponad 24 godziny.select * from sys.procedures where type = 'P' order by create_date desc
AND DatabaseID= 'the_Database_I_Want
, nic mi nie pokazuje, nawet zDATEADD(HH, -24, GETDATE())
komentarzem. czy robię coś źle?Przychodzę późno, ale „robię” sprawy związane z bezpieczeństwem i administracją.
TAK . Ważne jest, aby mieć lub tworzyć te dzienniki tam, gdzie to możliwe. Moim zdaniem jednak Twoim obowiązkiem jest nie „otwierać tego pudełka”, dopóki nie stanie się ważne. Innymi słowy - znowu, moim zdaniem - Twoim zadaniem jest zapewnienie repozytorium danych, upewnienie się, że jest bezpieczne, upewnienie się, że jest dostrojone ... a następnie trzymanie się z dala od danych w środku, chyba że zostaniesz specjalnie wezwany spójrz na to lub chyba, że jest to wymagane do osiągnięcia celu.
Moja opinia i mój pogląd, ale od wielu lat zajmowałem się wrażliwymi i poufnymi danymi i sprawiłem, że bardzo prawie nigdy [1] „nie otwieram skrzynki”, ponieważ to obniża zaufanie użytkowników.
Teraz pozwól mi pójść inną ścieżką : co jeśli nikt nie będzie w stanie szybko dowiedzieć się, jak procedura reaguje na przypadki skrajne? Zastanowienie się nad tym, co może zająć Ci godzinę lub godzinę, może zająć autorowi kilka minut: „Ach, racja, to się nie udaje, kiedy ...”
źródło