Да есть способ
Таблица для хранения результатов триггера
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
Триггер
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
Запрос на аудит результатов триггера
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
У другого администратора базы данных может быть другое мнение, но я считаю, что доступность этой информации важна для администратора.
FROM [SOME_DATABASE].[dbo].[ddl_objects_log]
... Должен ли я создать таблицу?Если у вас включена трассировка по умолчанию и она не пролонгирована, вы можете использовать ее, чтобы узнать, кто создал SP
Нажмите здесь, чтобы увеличить
Это зависит от того, почему вы хотите знать, были ли объекты созданы / изменены или удалены. Вы можете использовать уведомление о событии, чтобы регистрировать и уведомлять вас, если вы чувствуете, что объекты созданы / удалены или изменены неавторизованным пользователем. Убедитесь, что у вас есть надлежащие фильтры на месте.
Для полноты этого ответа я хочу упомянуть - Какую информацию о событиях я могу получить по умолчанию из SQL Server? от Аарона Бертран.
источник
DATEADD(HH, -24, GETDATE())
если вы хотите получать результаты более 24 часов.select * from sys.procedures where type = 'P' order by create_date desc
AND DatabaseID= 'the_Database_I_Want
, он ничего не показывает, даже сDATEADD(HH, -24, GETDATE())
комментариями. Я делаю что-то неправильно?Я прихожу поздно, но я "делаю" вопросы безопасности и администрирования.
YES . Важно иметь или создавать эти журналы, где это возможно. Однако, на мой взгляд, вы также не должны «открывать эту коробку», пока она не станет важной. Другими словами, опять же, на мой взгляд, ваша задача - обеспечить репо для данных, убедиться в их безопасности, убедиться, что они настроены ... и затем держаться подальше от данных внутри, если вы не призваны специально посмотрите на это или если это не требуется для достижения вашей цели.
Мое мнение и мое мнение, но я уже много лет имею дело с конфиденциальными и конфиденциальными данными и почти никогда не высказывался [1] «открыто», поскольку это снижает доверие к пользователям.
Теперь позвольте мне пойти другим путем : что, если никто не сможет быстро выяснить, как процедура реагирует на крайние случаи? То, что может занять у вас или у меня час, чтобы разобраться, может занять у автора несколько минут: «Ах, да, эта штука не работает, когда ...»
источник