Estoy tratando de averiguar quién cambió la contraseña para iniciar sesión en SQL Server 2008 R2.
Ya he verificado el seguimiento predeterminado, y no registra ese evento. La traza predeterminada incluirá estos eventos relacionados con la seguridad:
/*
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
*/
Además, busqué en la copia de seguridad del registro de transacciones para descubrirlo, pero no tuve suerte.
¿Hay alguna otra forma de averiguarlo?
Además, soy consciente de que un rastreo del lado del servidor ayudará, pero desafortunadamente en nuestro rastreo del lado del servidor, no incluimos el Audit Login Change Password Event
.
El mejor artículo que encontré es de Aaron Bertrand: Seguimiento de cambios de contraseña de inicio de sesión en SQL Server
sql-server-2008-r2
security
permissions
logins
Kin Shah
fuente
fuente
Respuestas:
Mi artículo ayudará si lo configura con anticipación, pero no cuando el evento ocurrió en el pasado y no tenía ningún tipo de mecanismo de auditoría configurado.
Sin embargo, todavía hay esperanza. Digamos que hice esto:
Esta información se encuentra en el rastreo predeterminado en EventClass 104 (Audit Addlogin Event). Sin embargo, si cambio la contraseña usando cualquiera de estos métodos:
Estos eventos no son capturados por la traza predeterminada, por razones obvias de seguridad: no debería ser posible para cualquier persona con acceso a la traza predeterminada averiguar cuál es la contraseña de otra persona, ni quieren que sea fácil incluso descubrir que se ha cambiado una contraseña (al sondear la frecuencia de estos eventos, por ejemplo, puede revelar ciertas propiedades de su estrategia de seguridad).
Entonces, ¿qué más puedes hacer? Si bien esto se basa en la información que todavía está en el registro, y también se basa en el uso de un comando DBCC no documentado contra una base de datos del sistema (es posible que desee hacer una copia de seguridad del maestro y restaurarlo en otro lugar), puede obtener alguna información del registro de transacciones, p.ej:
Esto generará, para los dos comandos anteriores, filas con la siguiente información (parcial):
No parece mucho, pero ahora toma esa porción 0x de la descripción, y luego haz:
¡Pistola humeante! Esta es la persona responsable de ese evento.
Por supuesto, si usan la
ALTER LOGIN
sintaxis para todas las operaciones (que deberían usar en lugar desp_password
), no puede distinguir entre alguien que cambia la base de datos predeterminada y alguien que cambia la contraseña. Tampoco puede decir (al menos eso puedo ver) qué inicio de sesión afectó, solo que esta persona cambió un inicio de sesión. Jon parece pensar que esta información también está en el registro, pero no pude encontrarla (a diferencia de la información de tiempo, que de alguna manera me desplacé más allá).Puede haber diferentes respuestas para los usuarios contenidos en SQL Server 2012, aunque sospecho que los cambios de contraseña todavía se ofuscan de manera similar. Dejaré eso para una pregunta separada.
fuente
fn_dblog
/fn_dump_dblog
contramaster
(o una copia de él) para averiguar qué director se cambió, incluso si tiene que usarloDBCC PAGE
.LOP_XACT_BEGIN
elTransaction ID
que encontraste. Contendrá la hora exacta y el SID del inicio de sesión que lo inició.DBCC LOG(master,3);
(o elfn_dblog()
equivalente) y vea si puede detectar algo que ayude a identificar el objetivo. Cuando lo hagoBEGIN TRANSACTION; ALTER LOGIN...
, obtengo información aún menos útil, que desaparece si retrocedo, y se convierte en lo anterior si me comprometo.esto es más largo que un comentario, publicado como respuesta
fuente
Puede utilizar el desencadenador DDL a nivel de servidor (tenga en cuenta que para este ejemplo debe tener habilitada y configurada la función de Correo electrónico de base de datos de SQL Server):
fuente