Una tabla en la base de datos de producción ha desaparecido "misteriosamente".
¿Alguien sabe de alguna manera de diagnosticar qué diablos le pasó? ¿Y quien lo hizo?
Edición 1: Esta es una aplicación interna, con poca seguridad. Todas las aplicaciones (excepto la mía, por supuesto ;-) son vulnerables a la inyección de SQL, pero nuestros usuarios son muy poco sofisticados y el nombre de la tabla no era uno que pudiera ser inmediatamente obvio, así que no creo que fuera una inyección de SQL (no que importa ... más allá del alcance de la pregunta).
Edición 2: Además, solo un FYI; esta tabla ha existido durante mucho tiempo, por lo que no se 'deshizo' con una restauración.
security
sql-server
John MacIntyre
fuente
fuente
Respuestas:
Es posible que pueda obtener la información del registro utilizando la función indocumentada :: fn_dblog que interpreta los registros de registro. Estoy en medio de una clase de recuperación ante desastres en este momento, pero si puedes esperar 2-3 horas, publicaré cómo hacerlo por ti: también debería poder obtener el nombre de usuario sin tener que comprar ninguna herramienta ( Solía dar vueltas alrededor del registro una tonelada en 2000, ya que escribí un montón del código de análisis de registro interno que DBCC CHECKDB usa en 2000).
[Editado para incluir instrucciones] Ok, terminé de enseñar y llamé a una publicación de blog para mostrarle cómo analizar el registro en 2000, 2005, 2008 para averiguar cuándo se cayó la tabla y quién lo hizo. Consulte mi publicación de blog en Averiguar quién dejó caer una tabla utilizando el registro de transacciones . [/editar]
¿Todavía tiene el registro de transacciones? ¿En qué modelo de recuperación está la base de datos? Si es SIMPLE, no haga nada que pueda causar un punto de control. Si es FULL o BULK_LOGGED, no haga una copia de seguridad del registro. Cualquiera de estos hará que el registro se trunca y luego puede perder la capacidad de mirar hacia atrás en el registro, aunque incluí un indicador de seguimiento en la publicación del blog que también puede ayudarlo con eso.
Gracias
PD Una forma de evitar que la tabla se caiga en 2000 sin agregar seguridad es crear una vista simple de esquema en ella: DROP TABLE fallará si la vista existe.
fuente
Tal vez fue Little Bobby Tables ...
fuente
Es posible que pueda recuperar esta información de los registros de SQL.
fuente
Si se ejecuta el registro de seguimiento predeterminado, toda la información se almacena en la carpeta de registro. Debería poder ver cuándo se cayó el objeto (tabla) y por qué conexión lo hizo. Pero este tipo de permiso solo debe otorgarse a los DBA de todos modos
fuente
Estoy tratando de arreglar un MSDB corrupto. Lo siento, no puedo dar más detalles.
Ejecute estos y debería dar una idea general de dónde buscar, suponiendo que su rastreo predeterminado esté activado.
SELECCIONAR * DESDE :: fn_trace_getinfo (predeterminado)
SELECCIONE t.EventID, t.ColumnID, e.name como Event_Description, c.name como Column_Description FROM :: fn_trace_geteventinfo (1) t JOIN sys.trace_events e ON t.eventID = e.trace_event_id JOIN sys.trace_columns c ON t.columnid = c.trace_column_id
fuente
La única forma de averiguar esta información es leyendo el registro de transacciones (suponiendo que esté en modo de recuperación completa).
Dos formas de hacer esto:
fuente
En SSMS puede intentar hacer clic derecho en el dB y navegar a través de Informes -> Informes estándar -> Historial de cambios de esquema.
Haga clic derecho en el informe y 'Guardar como' Excel y encuentre su objeto namne.
No podrá obtener nada si el servidor se ha reiniciado más de cinco veces después de que se haya caído el objeto.
fuente