Я пытаюсь выяснить, кто изменил пароль для входа в SQL Server 2008 R2.
Я уже проверил трассировку по умолчанию - и она не регистрирует это событие. Трассировка по умолчанию будет включать эти связанные с безопасностью события:
/*
Audit Add DB user event
Audit Add login to server role event
Audit Add Member to DB role event
Audit Add Role event
Audit Add login event
Audit Backup/Restore event
Audit Change Database owner
Audit DBCC event
Audit Database Scope GDR event (Grant, Deny, Revoke)
Audit Login Change Property event
Audit Login Failed
Audit Login GDR event
Audit Schema Object GDR event
Audit Schema Object Take Ownership
Audit Server Starts and Stops
*/
Кроме того, заглянул в резервную копию журнала транзакций, чтобы выяснить это, но не повезло.
Есть ли другой способ узнать это?
Кроме того, я знаю, что трассировка на стороне сервера поможет, но, к сожалению, в нашу трассировку на стороне сервера мы не включили Audit Login Change Password Event
.
Лучшая статья, которую я нашел, от Аарона Бертрана: отслеживание изменений пароля входа в SQL Server
Ответы:
Моя статья поможет, если вы настроите ее заранее, но не тогда, когда событие произошло в прошлом, и у вас не было настроено никакого механизма аудита.
Однако надежда все еще есть. Допустим, я сделал это:
Эта информация содержится в трассировке по умолчанию в EventClass 104 (Audit Addlogin Event). Однако, если я изменю пароль одним из следующих способов:
Эти события не фиксируются трассировкой по умолчанию по очевидным причинам безопасности - у всех, кто имеет доступ к трассировке по умолчанию, не должно быть возможности выяснить, какой пароль у кого-то другого, и при этом они не хотят упростить даже обнаружение того, что пароль был изменен (например, опрос частоты этих событий может выявить некоторые свойства вашей стратегии безопасности).
Так что еще можно сделать? Хотя это зависит от информации, которая все еще находится в журнале, а также от использования недокументированной команды DBCC для системной базы данных (вы можете создать резервную копию master и восстановить ее в другом месте), вы можете получить некоторую информацию из журнала транзакций, например:
Это даст для двух вышеупомянутых команд строки со следующей (частичной) информацией:
Не похоже много, но теперь возьмите ту часть описания 0x, а затем сделайте:
Дымящийся пистолет! Это человек, ответственный за это событие.
Конечно, если они используют
ALTER LOGIN
синтаксис для всех операций (которые они должны использовать вместоsp_password
), вы не сможете различить того, кто меняет базу данных по умолчанию, и того, кто меняет пароль. Вы же не можете сказать (по крайней мере , что я могу видеть) , что войти в этот пострадавших, только что этот человек изменил на вход в систему . Джон, кажется, думает, что эта информация также есть в журнале, но мне не удалось ее найти (в отличие от информации о времени, которую я как-то прокручивал в прошлом).В SQL Server 2012 могут быть разные ответы для отдельных пользователей - хотя я подозреваю, что смена пароля все еще запутывается подобными способами. Оставим это для отдельного вопроса.
источник
fn_dblog
/fn_dump_dblog
противmaster
(или его копию), чтобы выяснить, какой принципал был изменен, даже если вы должны использовать spelunkDBCC PAGE
.LOP_XACT_BEGIN
дляTransaction ID
вы нашли. Он будет содержать точное время и SID логина, который его запустил.DBCC LOG(master,3);
(илиfn_dblog()
эквивалент) и посмотрите, сможете ли вы найти что-нибудь, что поможет идентифицировать цель. Когда я это делаю,BEGIN TRANSACTION; ALTER LOGIN...
я получаю еще менее полезную информацию, которая исчезает при откате и становится выше при фиксации.это длиннее, чем комментарий, размещение как ответ
источник
Вы можете использовать триггер DDL на уровне сервера (обратите внимание, что для этого примера у вас должна быть включена и настроена функция Почта базы данных SQL Server):
источник