Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Saber quién modifica datos en una tabla

Estas en el tema de Saber quién modifica datos en una tabla en el foro de SQL Server en Foros del Web. Hola, tengo un pequeño problema y no sé como solucionarlo. Necesitaría que alguien me echara una mano. Os cuento: tengo una base de datos en ...
  #1 (permalink)  
Antiguo 28/04/2011, 04:45
 
Fecha de Ingreso: diciembre-2007
Ubicación: España
Mensajes: 51
Antigüedad: 16 años, 4 meses
Puntos: 1
Saber quién modifica datos en una tabla

Hola,

tengo un pequeño problema y no sé como solucionarlo. Necesitaría que alguien me echara una mano. Os cuento: tengo una base de datos en SQL SERVER y en ella tengo una tabla que contiene información, la cual no debe modificarse, es decir, la tabla es de sólo consulta. Tengo una web que utiliza esta B.D. y varios servicios de windows que también la utilizan. Me he encontrado con el problema de que se están modificando datos de la tabla de consulta que os comentaba anteriormente y necesitaría saber si hay algún modo de generar un log o algo similar con la información de cuando y que proceso modifica datos en esa tabla. ¿Es posible hacer algo así?

Muchas gracias
Un saludo
  #2 (permalink)  
Antiguo 28/04/2011, 08:04
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Saber quién modifica datos en una tabla

Hola, esto lo puedes sacar desde los reportes que ofrece sql server, si tienes los permisos necesarios en tu base de datos puedes ver las estadisticas de uso, los usuarios que esta logueados, cambios en las tablas etc. para esto nada mas le das boton derecho sobre el nombre de la base de datos y en la seccion de "reports" ahi puedes seleccionar el que mas se acomode a tus necesidades :).


Otra cosa que puedes hacer es que nada mas el usuario admin tenga permisos de escritura sobre esa base de datos, que tus demas usuarios solo tengan acceso de "select"


Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 28/04/2011, 08:27
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Saber quién modifica datos en una tabla

Adicional a lo que bien comenta LIBRAS, tus actualizaciones deben darse mediante STORE PROCEDURE, asi, tendras el control de quien tiene permisos de ejecucion.
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 28/04/2011, 14:59
 
Fecha de Ingreso: febrero-2009
Mensajes: 312
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Saber quién modifica datos en una tabla

Hola.

Aparte de lo que te indicaron, creo que la mejor herramienta es el profiler.
Creas una traza y filtras según criterio...

Saludos
  #5 (permalink)  
Antiguo 04/05/2011, 02:24
 
Fecha de Ingreso: diciembre-2007
Ubicación: España
Mensajes: 51
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Saber quién modifica datos en una tabla

Hola,

Gracias a todos por vuestras respuestas. Estoy intentando hacerlo mediante trazas, pero no encuentro el evento que muestra los select/insert/update realizados sobre una BD.

Gracias
  #6 (permalink)  
Antiguo 04/05/2011, 04:17
 
Fecha de Ingreso: diciembre-2007
Ubicación: España
Mensajes: 51
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Saber quién modifica datos en una tabla

Hola a todos,

al final he encontrado una forma mucho más fácil de hacerlo. Por un lado me creo una tabla donde voy a insertar la información que necesito del update que se realice sobre la tabla que deseo auditar. La tabla donde inserto esta información es la siguiente:

CREATE TABLE dbo.logTransacciones (
PK varchar(1000),
ValorOriginal varchar(1000),
ValorNuevo varchar(1000),
FechaTrn datetime,
Usuario varchar(128))
GO

A continuación me creo un trigger que me audite los update realizados sobre la tabla t_pedidos. El trigger es el siguiente:

ALTER TRIGGER dbo.TriggerUpdate ON dbo.t_pedidos FOR UPDATE
AS
SET NOCOUNT ON
INSERT INTO dbo.logTransacciones
(PK,ValorNuevo,ValorOriginal,FechaTrn, Usuario)
SELECT I.id,I.descripcion_anexo,D.descripcion_anexo, getdate(), system_user
FROM INSERTED I
INNER JOIN DELETED D ON
I.id = D.id
AND I.descripcion_anexo <> D.descripcion_anexo
GO

Como podéis comprobar, obtengo la primary key de la línea que se está actualizando, el valor antiguo y nuevo del campo que se está modificando, la fecha de actualización y el usuario que la realiza.Sólo me queda un pequeño detalle, ¿hay alguna forma de saber que aplicación está realizando la actualización o la conexión con la BD?Es que tengo varias aplicaciones que modifican la BD.

Muchas gracias
  #7 (permalink)  
Antiguo 04/05/2011, 11:50
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Saber quién modifica datos en una tabla

La funcion APP_NAME(), debe darte el nombre de la funcion que se esta conectando
__________________
MCTS Isaias Islas

Etiquetas: tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:19.