Что-то плохое случилось вчера.
Представление, которое было создано некоторое время назад, было изменено кем-то, что в итоге сломало отчеты. К несчастью. кто-то (сознательно или неосознанно) сделал эту модификацию в базе данных PRODUCTION.
Мой вопрос: есть ли способ (скрипт / программное обеспечение / бесплатное программное обеспечение и т. Д.), С помощью которого мы можем узнать, кто (имя пользователя) сделал эту модификацию, чтобы я мог отозвать доступ к производственной базе данных для этого пользователя.
Если мой вопрос неясен, пожалуйста, прокомментируйте.
источник
Object:Created
событие, а также, если представление было удалено и создано, а не изменено. Не уверен, что вы имеете в виду, не выполняя на сервере? Конечно, вы должны быть подключены к правильному экземпляру, но не имеет значения, откуда происходит соединение, если у вас есть разрешения.SELECT path FROM sys.traces where is_default=1
Мартин уже указал на лучшую дорогу - трассу административного аудита, которая обычно включена (если она явно не отключена). Если вы не можете найти информацию в трассировке администратора (была отключена или была переработана), вы можете получить информацию из резервных копий журнала. Поскольку это производственная БД, я предполагаю, что у вас есть регулярный цикл резервного копирования с периодическим полным резервным копированием и резервным копированием журнала. Вам потребуется восстановить базу данных на отдельном сервере примерно до времени происшествия, чтобы DDL находился в текущем восстановленном журнале. Тогда это простой вопрос использования
fn_dblog()
и проверки журнала.Один из способов - выполнить операции начала транзакции:
Если он
ALTER VIEW
был выпущен в отдельной транзакции (то есть не окруженBEGIN TRANSACTION
/COMMIT
), он запустит транзакцию с именемCreatProc transaction
. Ищите его, и[Transaction SID]
это SID логина, который вы хотите.Другой возможностью является поиск транзакции, которая получила SCH_M в желаемом представлении:
Обратите внимание, что если представление было изменено с помощью DROP, а затем CREATE, идентификатор объекта, вероятно, был изменен, но, по крайней мере, вы получите транзакцию, которая в последний раз выполняла CREATE (текущий идентификатор объекта представления в восстановленной базе данных). С идентификатором транзакции вы возвращаетесь и получаете информацию о начале транзакции:
[SID транзакции], опять же, ваш парень. Используйте
SUSER_SNAME
для получения имени входа из SID входа в систему. Если SID равен 0x01, это означает, что логин былsa
, что означает, что любой человек, который знаетsa
пароль, мог это сделать.источник
Нет, если вы не зарегистрировали его с помощью триггера DDL или чего-то подобного
Вы хотите посмотреть, кто имеет права ALTER в этой базе данных или членство в роли sysadmin / db_owner / ddl_admin. Это было бы лучше как общий обзор, а не охота на ведьм. Возможно, есть и другие люди, которые имеют право вносить несанкционированные и несанкционированные изменения.
источник
Если вы этого еще не сделали, возможно, вы захотите ознакомиться с отчетом «История изменений схемы», доступным в SQL Server Management Studio. Похоже, что SQL Server регистрирует изменения по умолчанию ( трассировка по умолчанию ), и вы сможете просматривать эти данные в этом отчете. Единственное, к сожалению, то, что эти файлы трассировки автоматически удаляются / переносятся с течением времени, поэтому данные уже могут быть утеряны. Удачи!
источник