我试图找出谁更改了 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
.
我发现的最佳文章来自 Aaron Bertrand:Tracking Login Password Changes in SQL Server
如果您提前设置,我的文章会有所帮助,但当事件发生在过去并且您没有设置任何类型的审核机制时则不会。
不过还是有希望的。假设我这样做了:
此信息位于 EventClass 104 (Audit Addlogin Event) 下的默认跟踪中。但是,如果我使用以下任一方法更改密码:
出于明显的安全原因,默认跟踪不会捕获这些事件- 任何有权访问默认跟踪的人都不应该弄清楚其他人的密码是什么,他们也不想让它变得容易甚至发现密码已更改(例如,轮询这些事件的频率可以揭示您的安全策略的某些属性)。
那你还能做什么?虽然这依赖于日志中仍然存在的信息,并且还依赖于对系统数据库使用未记录的 DBCC 命令(您可能希望备份 master 并在其他地方恢复它),但您可以从事务日志中获取一些信息,例如:
对于上述两个命令,这将产生具有以下(部分)信息的行:
看起来不多,但现在取描述的 0x 部分,然后执行以下操作:
吸烟枪!这是该事件的负责人。
当然,如果他们
ALTER LOGIN
对所有操作都使用语法(他们应该使用语法而不是sp_password
),则您无法区分更改默认数据库的人和更改密码的人。您也无法分辨(至少我可以看到)受影响的登录名,只是这个人更改了登录名。Jon 似乎认为该信息也在日志中,但我没有找到它(与时间信息不同,我以某种方式滚动过去)。SQL Server 2012 中包含的用户可能有不同的答案——尽管我怀疑密码更改仍然以类似的方式被混淆。将把它留给一个单独的问题。
这比评论长,作为答案发布
您可以在服务器级别使用 DDL 触发器(请注意,对于此示例,您必须启用并设置 SQL Server 数据库邮件功能):