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

espiar en la base

Estas en el tema de espiar en la base en el foro de Bases de Datos General en Foros del Web. Buenos dias tengo una duda puedo saber que usuario hace alguna modificacion en la base de datos, algo asi como que es lo que hizo, ...

  #1 (permalink)  
Antiguo 18/03/2016, 09:27
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
espiar en la base

Buenos dias tengo una duda
puedo saber que usuario hace alguna modificacion en la
base de datos, algo asi como que es lo que hizo, en donde
lo hizo, a que hora lo hizo y quien lo hizo. como podria realizarse
eso.

Saludos
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #2 (permalink)  
Antiguo 18/03/2016, 10:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: espiar en la base

¿Qué DBMS? ¿De qué tipo de "modificaciones" estás hablando?
¿Es tuya la base o el servidor? ¿Tienes usuario con permisos de administrador?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/03/2016, 10:21
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

uso mysql 5.1.73, insert, delete y update, si es mia, soy el administrador de la base de datos
y del servidor
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #4 (permalink)  
Antiguo 18/03/2016, 10:31
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: espiar en la base

aqui un link para tracear los cambios en cuanto a DML

http://stackoverflow.com/questions/1...ges-to-records
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 18/03/2016, 10:37
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

pero quisiera saber que usuario y a que hora modifico
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #6 (permalink)  
Antiguo 18/03/2016, 10:48
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: espiar en la base

a pues para esos usas las vistas de sistema de mysql para obtener el usuario con la sesion activa en la base de datos y la hora...bueno eso con una funcion para tiempo y listo :)

aqui otro link.....buscando en google se encuentran muchas cosas ;)

http://custom-designed-databases.com...es-with-mysql/
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 18/03/2016, 10:52
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

a esos ejemplos no le entiendo por eso pedi una ayuda mas especializada aqui
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #8 (permalink)  
Antiguo 18/03/2016, 11:05
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: espiar en la base

Los ejemplos estan explicados de manera sencilla, te dicen que hay que crear una tabla para guardar los valores viejos u otra para trackear quien hizo el cambio, y despues de eso crear algunos triggers para cuando se haga un inser, delete o update poder saber quien hizo el cambio y que fue lo que cambio, a que te refieres con ayuda especializada?

Sin animos de ofender si no entiendes esos ejemplos, como le haces para administrar la base de datos????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 18/03/2016, 11:12
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

pues es una base algo sencilla y pues no le entiendo porque no identifico en donde sacamos el usuario de la otra tabla y que es lo que hace cada linea de codigo
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #10 (permalink)  
Antiguo 18/03/2016, 11:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: espiar en la base

Cita:
Iniciado por Lugo100 Ver Mensaje
pues es una base algo sencilla y pues no le entiendo porque no identifico en donde sacamos el usuario de la otra tabla y que es lo que hace cada linea de codigo
Ok...
Empecemos con un par de preguntas:
1) Si son cambios en los datos, ¿ese usuario los ahce manualmente, a SQL puro?
2) Si son cambios en la estructura de las tablas y SP, ¿por que tiene permisos para eso?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 18/03/2016, 11:21
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: espiar en la base

A ver vamos por partes quieres saber cuales son los cambios que se realizan sobre cada una de las tablas de tu base de datos y quien los esta haciendo o solo tienes algunas tablas sensitivas a estos cambios, con esto quiero decir que solo algunas tablas son factibles para trackear los cambios?

Te comento esto porque si quieres saber quien cambio que cosa en toda la base de datos le vas a meter muchisima carga a tu servidor asi como a la base con datos que quizas realmente no valgan la pena o no sea importante saber.

Ahora el ejemplo que te mande muestra los cambios que se realizan a nivel base de datos, si los cambios que se hacen en tu base son por medio de una aplicacion aqui cambiaria un poco la cosa, porque tendrias tu que mandar el parametro del usuario que esta realizando el cambio, en el ejemplo maneja la funcion user() con esta funcion obtiene los valores del usuario que esta conectado pero si el cambio es con una aplicacion siempre aparecera que el cambio lo hizo el usuario que tienes configurado para que se conecte a la aplicacion.......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 18/03/2016, 11:26
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

Ok, asi mejor solo quiero saber a una tabla en especifico se llama convenios y si despues de checar una linea en un codigo y checar el codigo que me proporsionaste vi como jalaba el usuario, no se si se necesite que comparta la estructura de la tabla que quiero trackear
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #13 (permalink)  
Antiguo 18/03/2016, 11:27
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

los cambios son mediante una aplicacion web, no entran, ni tienen conocimiento de que lo que hacen se guarda en una base de datos
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #14 (permalink)  
Antiguo 18/03/2016, 11:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: espiar en la base

Lo que describe Libras es precisamente le método más difundido de administrar los cambios de datos: Simplemente cada tabla contiene una columna dedicada al user que está realizando la acción, y otra paa la fecha y hora de la misma.
Es lo más simple y sencillo, que tiene solo el detalle que debes acordarte de programar correctamente todo para que sea consistente.
A otros niveles, los DBMS tienen recursos para monitorear las acciones que se realizan, aunque no están disponibles en las versiones de distribución gratuita.
Adicionalmente se suelen programar las aplicaciones para que todas estas acciones se registren en bases especiales de log, que sirven para reconstruir lo que fue sucediendo.

O sea, hay que crear todo lo que necesites.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 18/03/2016, 11:36
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: espiar en la base

Cita:
Iniciado por Lugo100 Ver Mensaje
los cambios son mediante una aplicacion web, no entran, ni tienen conocimiento de que lo que hacen se guarda en una base de datos
usas un usuario generico para realizar las conexiones a la base de datos o cada usuario tiene su propia cuenta para conectarse a la base de datos???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #16 (permalink)  
Antiguo 18/03/2016, 11:39
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

un usuario generico pero para poder entrar al menu del crud cada uno tiene su cuenta
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #17 (permalink)  
Antiguo 18/03/2016, 11:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: espiar en la base

Aunque usara un mismo usuario genérico de conexión, tendría que , al menos, registrar el usuario de aplicación en las tablas.
En una de las aplicaciones que administramos, un mismo usuario de área tiene N usuarios dependientes no registrados como user de base, pero sí como miembros de la empresa con su user/pwd en la aplicación. Ese es el username que se registra en las tablas de la base con cada ABM de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 18/03/2016, 11:42
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: espiar en la base

En este caso tendrias que mandar por medio de php cual es el usuario que esta logueado a la base de datos cuando realices la auditoria :) o no se como sabes que usuario es el que esta trabajando en la base de datos......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #19 (permalink)  
Antiguo 18/03/2016, 11:47
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

registro el usuario y la hora en la que se logueo en una tabla y en mi tabla principal de convenios tengo la variable NOW() para saber a que hora fue editado algun registro, acutualmente con eso hago un poco de seguimiento por la hora en la que se loguea el usuario y la hora en la que se modifico el registro, pero necesito algo mas preciso, y no se php, mi aplicacion es en java,html, javaScript y un poco de ajax y json
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #20 (permalink)  
Antiguo 18/03/2016, 11:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: espiar en la base

Cita:
no se php, mi aplicacion es en java,html, javaScript y un poco de ajax y json
Da igual.
La idea es que eso que haces sólo en esa tabla deberás hacerlo en todas y cada una de las tablas que existan en la base, en cada INSERT y UPDATE que se realicen en ellas.
Es la única forma de hacer el monitoreo de cambios en la base sin sobrecargar al DBMS con triggers innecesarios.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 18/03/2016, 11:55
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: espiar en la base

Pues si ya tienes eso para saber los cambios nada mas agregale el usuario que realizo el cambio, por medio de java puedes obtener cual es el usuario que esta logueado en tu base de datos :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #22 (permalink)  
Antiguo 18/03/2016, 11:56
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

lo quise implementar asi pero no me corria la aplicacion, por eso realice lo antes comentado y pues no se cual es la mejor opcion sin afectar tanto la aplicacion y la base de datos
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #23 (permalink)  
Antiguo 18/03/2016, 11:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: espiar en la base

SI el usuario es de aplicación, pero usa uno genérico de conexión, entonces supongo que conservarás al usuario de aplicación en algun objeto en memoria para administrar su sesión.
En ese caso simplemente usas el valor del atributo de username que hayas incluido en él, cada vez que invoques a la base para una operación ABM, mandándolo como dato para insertar en la columna respectiva.

La verdad me cuesta comprender qué es lo que se te complica de la idea.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #24 (permalink)  
Antiguo 18/03/2016, 12:04
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

se me complica la idea en no se lo que es conservar el usuario en memoria y no se como manipular la variable para enviarla a la tabla en la que necesito el monitoreo
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #25 (permalink)  
Antiguo 18/03/2016, 12:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: espiar en la base

Bueno, eso ya es terreno de Programación, y OFF TOPIC en este foro.
¿Por qué no preguntas cómo se hace en el subforo del lenguaje que estás usando para la aplicación? A fin de cuentas, si estás usando AJAX, estás usando PHOP... ¿o no?

O mejor aún: San Google debe tener infinidad de cosas para ofrecerte, si le preguntas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #26 (permalink)  
Antiguo 18/03/2016, 12:31
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

intente hacer eso y no me funciono



Código SQL:
Ver original
  1. CREATE
  2.  
  3. TRIGGER `covenios`.`convenios_AINS`
  4.  
  5. AFTER INSERT ON `covenios`.`convenios`
  6.  
  7. FOR EACH ROW
  8.  
  9. INSERT INTO History (DATA,idSequenceTT,ModifiedBy) VALUES (NEW.DATA,NEW.idSequence,USER())
  10.  
  11. $$
  12.  
  13. CREATE
  14.  
  15. TRIGGER `covenios`.`convenios_AUPD`
  16.  
  17. AFTER UPDATE ON `covneios`.`convenios`
  18.  
  19. FOR EACH ROW
  20.  
  21. INSERT INTO History (DATA,idSequenceTT,ModifiedBy) VALUES (NEW.DATA,NEW.idSequence,USER())
  22.  
  23. $$
  24.  
  25. delimiter $$
  26.  
  27. CREATE TABLE `history` (
  28.  
  29. `HistoryId` INT(11) NOT NULL AUTO_INCREMENT,
  30.  
  31. `id_con` INT(11) NOT NULL,
  32.  
  33. `dtModified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  34.  
  35. `ModifiedBy` VARCHAR(45) NOT NULL,
  36.  
  37. `data` VARCHAR(45) DEFAULT NULL,
  38.  
  39. PRIMARY KEY (`HistoryId`),
  40.  
  41. KEY `fk1_con_HIST_idx` (`id_con`),
  42.  
  43. CONSTRAINT `fk1_con_HIST` FOREIGN KEY (`id_con`) REFERENCES `convenios` (`id_con`) ON DELETE NO ACTION ON UPDATE NO ACTION
  44.  
  45. )
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #27 (permalink)  
Antiguo 18/03/2016, 12:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: espiar en la base

Cita:
intente hacer eso
Creo que no entendiste la idea que expresé de "triggers innecesarios", y que los mismos no sirven para hacer el seguimiento de los usuarios si son genéricos. ¿no?
Cita:
y no me funciono
Ok...
¿Te das cuenta que "no funcionó" no es una información útil, no?
Es decir, si no nos dices QUÉ fue lo que no te funcionó, es difícil adivinarlos solo mirando el código.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #28 (permalink)  
Antiguo 18/03/2016, 13:00
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

No me funciono no hizo el registro en la tabla history despues de hacer un insert en la tabla convenios

que es lo que puedo implementar que sea en la base no en la aplicacion
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #29 (permalink)  
Antiguo 18/03/2016, 14:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: espiar en la base

Prueba insertar manualmente un registro en las tablas convenios_AINS o convenios_AUPD , poniendo el valor del idSequenceTT sin usar el autoincremental.
También ten en cuenta que estás usando nombres de columnas que son palabras reservadas. Eso puede causar a veces errores de ejecución indetectables.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #30 (permalink)  
Antiguo 23/03/2016, 10:46
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: espiar en la base

Buenos dias
ya tuve una buena respuesta de parte del trigger en una insercion pero le tuve que quitar dos campos donde tenia el id_con que era donde yo esperaba identificar el documento y el campo data que no sabia para que era, y en el usuario me manda solo usuario root@localhost no me manda el usuario de la aplicacion

+-----------+---------------------+----------------+
| HistoryId | dtModified | ModifiedBy |
+-----------+---------------------+----------------+
| 1 | 2016-03-23 10:36:38 | root@localhost |
+-----------+---------------------+----------------+

Código SQL:
Ver original
  1. delimiter $$    
  2. CREATE
  3.      
  4.     TRIGGER `convenios_AINS`
  5.      
  6.     AFTER INSERT ON `convenios`
  7.      
  8.     FOR EACH ROW
  9.      
  10.     INSERT INTO History (dtModified,ModifiedBy) VALUES (NOW(),USER())
  11.      
  12.      $$
  13.     delimiter $$    
  14.     CREATE
  15.      
  16.     TRIGGER `convenios_AUPD`
  17.      
  18.     AFTER UPDATE ON `convenios`
  19.      
  20.     FOR EACH ROW
  21.      
  22.     INSERT INTO History (id_con,dtModified,ModifiedBy) VALUES (id_con,NOW(),USER())
  23.      
  24.     $$
  25.      
  26.     delimiter $$
  27.      
  28.     CREATE TABLE `history` (
  29.      
  30.     `HistoryId` INT(11) NOT NULL AUTO_INCREMENT,
  31.      
  32.    
  33.      
  34.     `dtModified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  35.      
  36.     `ModifiedBy` VARCHAR(45) NOT NULL,
  37.      
  38.    
  39.      
  40.     PRIMARY KEY (`HistoryId`)
  41.      
  42.     );
  43. $$
__________________
"Las piedras me las quito caminando y las pedradas tambien"

Etiquetas: Ninguno
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 13:53.