Duda sobre un Drop

19/11/2004 - 10:32 por Sole | Informe spam
Hola grupo, si alguién borra una tabla, como puedo saber desde que máquina
lo ha hecho?? Por el usuario no puedo sacarlo ya que hay varias sesiones con
el mismo usuario.

Muchas gracias

Preguntas similare

Leer las respuestas

#6 ulises
20/11/2004 - 01:27 | Informe spam
También se puede obtener desde el LOG pero es un poco complejo, con

select * from ::fn_dblog(NULL,NULL)

obtienes los registros del log, notarás que por cada operación se
realizan toda una serie de acciones las mismas que son registradas con
el mismo [Current LSN], otras columnas que son interesantes son UID
que te indicará el uid del usuario que ha ejecutado la operación
aunque solo aparecerá en el primer registro de todo el grupo, además
si solo te interesan las acciones que realizan un DROP la columna
[Transaction Name] deber ser igual a 'DROPOBJ' igualmente en el primer
registro de todo lo grupo, entonces si deseas obtener los grupos de
registros que han hecho un DROP podrías hacer algo como :

SELECT * FROM ::fn_dblog(NULL,NULL)
WHERE Substring([Current LSN],1,17)
IN ( SELECT Substring([Current LSN],1,17)
FROM ::fn_dblog(NULL,NULL)
WHERE [Transaction Name] = 'DROPOBJ' )

En cada uno de esos grupos buscarás el primer registro cuya columna
[Object Name] tenga el valor de 'dbo.sysobjects', ya ubicado ese
registro su columna [Row Data] tiene el nombre de la tabla eliminada
convertida a binario, por ejemplo si la tabla es "prueba"

select convert(varbinary(100),'prueba')
es
0x707275656261

entonces buscarás que 0x700072007500650062006100 (se agrega 0x00 al
final de cada caracter) se encuentre dentro de la cadena hexadecimal,
ya encontrado, el primer registro de ese grupo tiene el UID del
usuario que realizó el DROP, buscalo en la tabla sysusers para
encontrar el nombre.

Una observación adicional, el uso de ::fn_dblog tiene un problema con
la columna [Row Data] si utilizas * lo displaya en el QA pero si
especificas columnas o tratas de usar SELECT INTO no lo muestra ni
copia bien, si se desea manipular esa columna tal vez sea mejor usar :

DBCC LOG(bd,3).

Saludos,
Ulises

On Fri, 19 Nov 2004 17:29:39 +0100, "Sole"
<solecvcdARROBAHotmail.com(NOSPAM)> wrote:

Muchas gracias Salvador :)

"Salvador Ramos" escribió en el
mensaje news:
Hola:

Si que puedes recuperarlo pero con herramientas de terceros que deberás
pagar. Puedes visitar www.lumigent.com, y allí echar un vistazo al


producto
Log Explorer.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿ Te interesa participar en las reuniones
del grupo de Usuarios de SQL Server y .NET ?
Se harán en levante de España, (Alicante o Murcia)?

"Sole" <solecvcdARROBAHotmail.com(NOSPAM)> escribió en el mensaje
news:
> Muchas gracias Maxi, me lo temía. El problema no es que fuese un usuario
> sino que ha sido un desarrollador :D, por la bd no hay problemas, pero


era
> una curiosidad que tenía.
>
> "Maxi" escribió en el mensaje
> news:
>> Hola, mmm no creo que puedas sacar esa informacion a menos que hayas
> tenido
>> el profiler ejecutando :(
>>
>> Pero yo me preocuparia por otra cosa: Como es posible que un usuario
>> pueda
>> eliminar una tabla?
>>
>> "Sole" <solecvcdARROBAHotmail.com(NOSPAM)> escribió en el mensaje
>> news:
>> > Hola grupo, si alguién borra una tabla, como puedo saber desde que
> máquina
>> > lo ha hecho?? Por el usuario no puedo sacarlo ya que hay varias
>> > sesiones
>> > con
>> > el mismo usuario.
>> >
>> > Muchas gracias
>> >
>> >
>>
>>
>
>





Respuesta Responder a este mensaje
#7 Sole
20/11/2004 - 13:58 | Informe spam
Genial Ulises!!!! debo leerlo un par de veces más, y el lunes lo pruebo.

Muchas gracias por la explicación y las molestias.

"ulises" escribió en el mensaje
news:
También se puede obtener desde el LOG pero es un poco complejo, con

select * from ::fn_dblog(NULL,NULL)

obtienes los registros del log, notarás que por cada operación se
realizan toda una serie de acciones las mismas que son registradas con
el mismo [Current LSN], otras columnas que son interesantes son UID
que te indicará el uid del usuario que ha ejecutado la operación
aunque solo aparecerá en el primer registro de todo el grupo, además
si solo te interesan las acciones que realizan un DROP la columna
[Transaction Name] deber ser igual a 'DROPOBJ' igualmente en el primer
registro de todo lo grupo, entonces si deseas obtener los grupos de
registros que han hecho un DROP podrías hacer algo como :

SELECT * FROM ::fn_dblog(NULL,NULL)
WHERE Substring([Current LSN],1,17)
IN ( SELECT Substring([Current LSN],1,17)
FROM ::fn_dblog(NULL,NULL)
WHERE [Transaction Name] = 'DROPOBJ' )

En cada uno de esos grupos buscarás el primer registro cuya columna
[Object Name] tenga el valor de 'dbo.sysobjects', ya ubicado ese
registro su columna [Row Data] tiene el nombre de la tabla eliminada
convertida a binario, por ejemplo si la tabla es "prueba"

select convert(varbinary(100),'prueba')
es
0x707275656261

entonces buscarás que 0x700072007500650062006100 (se agrega 0x00 al
final de cada caracter) se encuentre dentro de la cadena hexadecimal,
ya encontrado, el primer registro de ese grupo tiene el UID del
usuario que realizó el DROP, buscalo en la tabla sysusers para
encontrar el nombre.

Una observación adicional, el uso de ::fn_dblog tiene un problema con
la columna [Row Data] si utilizas * lo displaya en el QA pero si
especificas columnas o tratas de usar SELECT INTO no lo muestra ni
copia bien, si se desea manipular esa columna tal vez sea mejor usar :

DBCC LOG(bd,3).

Saludos,
Ulises

On Fri, 19 Nov 2004 17:29:39 +0100, "Sole"
<solecvcdARROBAHotmail.com(NOSPAM)> wrote:

>Muchas gracias Salvador :)
>
>"Salvador Ramos" escribió en el
>mensaje news:
>> Hola:
>>
>> Si que puedes recuperarlo pero con herramientas de terceros que deberás
>> pagar. Puedes visitar www.lumigent.com, y allí echar un vistazo al
>producto
>> Log Explorer.
>>
>> Un saludo
>> Salvador Ramos
>> Murcia - España
>> [Microsoft MVP SQL Server]
>> www.helpdna.net
>> ¿ Te interesa participar en las reuniones
>> del grupo de Usuarios de SQL Server y .NET ?
>> Se harán en levante de España, (Alicante o Murcia)?
>>
>> "Sole" <solecvcdARROBAHotmail.com(NOSPAM)> escribió en el mensaje
>> news:
>> > Muchas gracias Maxi, me lo temía. El problema no es que fuese un


usuario
>> > sino que ha sido un desarrollador :D, por la bd no hay problemas,


pero
>era
>> > una curiosidad que tenía.
>> >
>> > "Maxi" escribió en el mensaje
>> > news:
>> >> Hola, mmm no creo que puedas sacar esa informacion a menos que hayas
>> > tenido
>> >> el profiler ejecutando :(
>> >>
>> >> Pero yo me preocuparia por otra cosa: Como es posible que un usuario
>> >> pueda
>> >> eliminar una tabla?
>> >>
>> >> "Sole" <solecvcdARROBAHotmail.com(NOSPAM)> escribió en el mensaje
>> >> news:
>> >> > Hola grupo, si alguién borra una tabla, como puedo saber desde que
>> > máquina
>> >> > lo ha hecho?? Por el usuario no puedo sacarlo ya que hay varias
>> >> > sesiones
>> >> > con
>> >> > el mismo usuario.
>> >> >
>> >> > Muchas gracias
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>

Respuesta Responder a este mensaje
#8 Salvador Ramos
22/11/2004 - 09:39 | Informe spam
Todo lo aquí expuesto lo puedes leer en las FAQ's del grupo también. Se me
olvidó pasarte el link:
www.helpdna.net/bosqlfaq.htm

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿ Te interesa participar en las reuniones
del grupo de Usuarios de SQL Server y .NET ?
Se harán en levante de España, (Alicante o Murcia)?

"Sole" <solecvcdARROBAHotmail.com(NOSPAM)> escribió en el mensaje
news:
Genial Ulises!!!! debo leerlo un par de veces más, y el lunes lo pruebo.

Muchas gracias por la explicación y las molestias.

"ulises" escribió en el mensaje
news:
También se puede obtener desde el LOG pero es un poco complejo, con

select * from ::fn_dblog(NULL,NULL)

obtienes los registros del log, notarás que por cada operación se
realizan toda una serie de acciones las mismas que son registradas con
el mismo [Current LSN], otras columnas que son interesantes son UID
que te indicará el uid del usuario que ha ejecutado la operación
aunque solo aparecerá en el primer registro de todo el grupo, además
si solo te interesan las acciones que realizan un DROP la columna
[Transaction Name] deber ser igual a 'DROPOBJ' igualmente en el primer
registro de todo lo grupo, entonces si deseas obtener los grupos de
registros que han hecho un DROP podrías hacer algo como :

SELECT * FROM ::fn_dblog(NULL,NULL)
WHERE Substring([Current LSN],1,17)
IN ( SELECT Substring([Current LSN],1,17)
FROM ::fn_dblog(NULL,NULL)
WHERE [Transaction Name] = 'DROPOBJ' )

En cada uno de esos grupos buscarás el primer registro cuya columna
[Object Name] tenga el valor de 'dbo.sysobjects', ya ubicado ese
registro su columna [Row Data] tiene el nombre de la tabla eliminada
convertida a binario, por ejemplo si la tabla es "prueba"

select convert(varbinary(100),'prueba')
es
0x707275656261

entonces buscarás que 0x700072007500650062006100 (se agrega 0x00 al
final de cada caracter) se encuentre dentro de la cadena hexadecimal,
ya encontrado, el primer registro de ese grupo tiene el UID del
usuario que realizó el DROP, buscalo en la tabla sysusers para
encontrar el nombre.

Una observación adicional, el uso de ::fn_dblog tiene un problema con
la columna [Row Data] si utilizas * lo displaya en el QA pero si
especificas columnas o tratas de usar SELECT INTO no lo muestra ni
copia bien, si se desea manipular esa columna tal vez sea mejor usar :

DBCC LOG(bd,3).

Saludos,
Ulises

On Fri, 19 Nov 2004 17:29:39 +0100, "Sole"
<solecvcdARROBAHotmail.com(NOSPAM)> wrote:

>Muchas gracias Salvador :)
>
>"Salvador Ramos" escribió en el
>mensaje news:
>> Hola:
>>
>> Si que puedes recuperarlo pero con herramientas de terceros que
>> deberás
>> pagar. Puedes visitar www.lumigent.com, y allí echar un vistazo al
>producto
>> Log Explorer.
>>
>> Un saludo
>> Salvador Ramos
>> Murcia - España
>> [Microsoft MVP SQL Server]
>> www.helpdna.net
>> ¿ Te interesa participar en las reuniones
>> del grupo de Usuarios de SQL Server y .NET ?
>> Se harán en levante de España, (Alicante o Murcia)?
>>
>> "Sole" <solecvcdARROBAHotmail.com(NOSPAM)> escribió en el mensaje
>> news:
>> > Muchas gracias Maxi, me lo temía. El problema no es que fuese un


usuario
>> > sino que ha sido un desarrollador :D, por la bd no hay problemas,


pero
>era
>> > una curiosidad que tenía.
>> >
>> > "Maxi" escribió en el mensaje
>> > news:
>> >> Hola, mmm no creo que puedas sacar esa informacion a menos que
>> >> hayas
>> > tenido
>> >> el profiler ejecutando :(
>> >>
>> >> Pero yo me preocuparia por otra cosa: Como es posible que un
>> >> usuario
>> >> pueda
>> >> eliminar una tabla?
>> >>
>> >> "Sole" <solecvcdARROBAHotmail.com(NOSPAM)> escribió en el mensaje
>> >> news:
>> >> > Hola grupo, si alguién borra una tabla, como puedo saber desde
>> >> > que
>> > máquina
>> >> > lo ha hecho?? Por el usuario no puedo sacarlo ya que hay varias
>> >> > sesiones
>> >> > con
>> >> > el mismo usuario.
>> >> >
>> >> > Muchas gracias
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida