elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  [DUDA]PL/SQL en v$session
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [DUDA]PL/SQL en v$session  (Leído 11,804 veces)
-Ramc-


Desconectado Desconectado

Mensajes: 495



Ver Perfil
[DUDA]PL/SQL en v$session
« en: 5 Noviembre 2009, 19:12 pm »

Hola, pasó a estrenar el nuevo subforo con esta duda.

Tengo que hacer un procedimento almacenado que me diga los comandos ejecutados por X usuario en X intervalo fechas que recibo por parametros; se que al ejecutar un comando con un usuario en la vista v$session, específicamente el parametro command se modifica con el código del último comando de ese usuario, pero, no hay manera de poner un trigger en esa vista, ya que me tocó hacer un enredo para obtener los usuarios conectados y guardarlos en una tabla.  :xD

Pero, no tengo idea de como hacer para guardar todas esas modificaciones que se hagan en v$session a mi tabla, lo que tenía pensado si no había otra forma era poner un bucle que fuera consultando v$session y al ver que algo se a modificado, lo guardara junto con la fecha actual, pero, este método, ademas de no ser eficiente, mantendría mi script dentro de un bucle infinito y tendría que abrir otra sesión, para ejecutar otros comandos.

Necesito su ayuda, si alguien sabe de algún otro método para conseguir esa información, que no sea el bucle mortal  :xD por favor hagamelo saber en este post, estaría muy agradecido, no que me den el código, ya que como ven puedo sacarlo con el bucle mortal jaja, pero, si necesito un empujon para saber si hay una forma más eficiente, apenas voy aprendiendo a manejar oracle, supongo que para ustedes será fácil, pero, la documentación tampoco es muy buena en internet.

Gracias y saludos.


En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: [DUDA]PL/SQL en v$session
« Respuesta #1 en: 5 Noviembre 2009, 19:22 pm »

La tienes un pelin dificil  ;D  lo mas cercano que se me podria ocurrir (Ya que no puedes usar triggers y la verdad un bucle  :-\  no quisiera saber cuanto afectaria esto a la lectura de disco). Puedes intentar con un Evento? un Evento que se ejecute cada 60 segundos (1 minuto) y consulte la vista V$SESSION para obtener eso que solicitas... Ya con dicho evento podrias llamar tu procedimiento almacenado acorde a que se cumpla o no algo, lo negativo de los eventos que no es en tiempo real (Como un trigger) pero mejor que lea cada 60 segundos y no que lea cada segundo como haria un Bucle. Si te interesa sobre eventos en Oracle investigate sobre:

DBMS_SCHEDULER

 ;) 


En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: [DUDA]PL/SQL en v$session
« Respuesta #2 en: 5 Noviembre 2009, 19:25 pm »

De que BBDD estamos hablando?

Las consultas las crean los propios usuarios?, porque si lo tienes encapsulado podrías tener procedimientos que hagan lo que sea, y en el proceso llaman a otro que realice el LOG :-\

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
-Ramc-


Desconectado Desconectado

Mensajes: 495



Ver Perfil
Re: [DUDA]PL/SQL en v$session
« Respuesta #3 en: 5 Noviembre 2009, 19:36 pm »

Muchas gracias ^TiFa^ , voy a probar con un evento y a investigar porque no me los explicaron en clases  :¬¬.

Porque estoy haciendo todo como sys para poder sacar la información y ni siquiera así me deja ponerle un trigger a esa vista, me dice que no es posible a ese tipo de vistas y blablabla.  :xD

Voy a probar y te comento.

Saludos.

The following error or errors occurred while posting this message:
Warning - while you were typing a new reply has been posted. You may wish to review your post.


Uso oracle.

Es que tengo que registrar todo, tanto comandos DML como DDL, de cualquier usuario.

Hay una vista v$session que me deja ver los usuarios, también tiene un campo llamado command que guarda un número que equivale a un comando, por ejemplo el 1 es CREATE TABLE y el 3 es SELECT y así, pero, a esa vista no le puedo poner un trigger.

Entonces tenía pensando un procedimiento que tomara los datos de la vista y los manipulara con un cursor para saber cualos son los que son :xD y los guardara en mi tabla junto con la fecha actual.

Después otro procedimiento recibiera 2 fechas(X, Y), que tomara los datos de esa tabla y me mostrara los datos que están entre las fechas X y Y.

No puedo dejar a ese procedimiento recopilando información sólo ya que necesito poder ejecutar otros comandos.

Saludos.
En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: [DUDA]PL/SQL en v$session
« Respuesta #4 en: 5 Noviembre 2009, 20:02 pm »

Ahhhhhhhh pero yo pensaba que era que en tu clase los profesores te habian exhigido que no podias crear un TRIGGER sobre esta vista   :xD  por eso sugeri lo del evento, olvidalo.

Prueba lo siguiente:

Código
  1.  
  2. CREATE OR REPLACE TRIGGER trigo
  3.  AFTER LOGON ON DATABASE
  4. DECLARE
  5.  v_prog sys.v_$session.program%TYPE;
  6. BEGIN
  7.   /* Tu codigo Aqui */
  8. END;
  9. /
  10.  
  11.  

:) No me digas tampoco te explicaron sobre los TRIGGERS de sistemas y sus condiciones en Oracle???? (No estoy ya empapada del tema, hace unos meses abandone el PL/SQL en Oracle) Pero esto te puede ayudar, para crear TRIGGERS sobre vistas de SYSTEM.

http://www.psoug.org/reference/system_trigger.html

Tambien existe la posibilidad de que hagas otra vista de la vista v$session solamente con los campos que te interesan ver de v$session y crear un usuario con los roles que le permitan ver dicha vista en su entorno, y asi captar en tiempo real todos los cambios que requieras obtener.  :P Y puedes crear tu Stored Procedure llamando los datos de esta vista nueva que usa de referencia a v$session y mostrar en OUTPUT los resultados obtenidos  ;)  ya sabes que a tu ST puedes concatenarle la fecha actual con current_date();

Suerte con eso :)
« Última modificación: 5 Noviembre 2009, 20:13 pm por ^TiFa^ » En línea

-Ramc-


Desconectado Desconectado

Mensajes: 495



Ver Perfil
Re: [DUDA]PL/SQL en v$session
« Respuesta #5 en: 5 Noviembre 2009, 20:12 pm »

Sí, eso fue lo que hice para obtener los usuarios conectados, pero, no hay una que diga AFTER COMMAND EXECUTE ON DATABASE o sí??  :huh:
En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: [DUDA]PL/SQL en v$session
« Respuesta #6 en: 5 Noviembre 2009, 20:16 pm »

No puedo afirmartelo lo siento.

Pero porque no creas una vista copia de v$session solo con los campos que deseas obtener ver? y dicha vista otorgale permisos a X usuario para que este usuario cree un procedimiento almacenado (si es requerido) para ver dichos datos llamando los campos de esa vista nueva?
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: [DUDA]PL/SQL en v$session
« Respuesta #7 en: 5 Noviembre 2009, 20:51 pm »

De hecho hice una mini-prueba en mi Oracle   :-*

Código
  1.  
  2. SQL> CREATE VIEW ejemplo AS SELECT command, USER#, username, STATUS, logon_time FROM v$session;
  3.  
  4. VIEW created.
  5.  
  6. SQL> SELECT * FROM ejemplo;
  7.  
  8.   COMMAND      USER# USERNAME                       STATUS   LOGON_TIM
  9. ---------- ---------- ------------------------------ -------- ---------
  10.         0          0                                ACTIVE   05-NOV-09
  11.         0          0                                ACTIVE   05-NOV-09
  12.         0          0                                ACTIVE   05-NOV-09
  13.         0          0                                ACTIVE   05-NOV-09
  14.         0          0                                ACTIVE   05-NOV-09
  15.         0          0                                ACTIVE   05-NOV-09
  16.         3          0 SYS                            ACTIVE   05-NOV-09
  17.         0          0                                ACTIVE   05-NOV-09
  18.         0          0                                ACTIVE   05-NOV-09
  19.         0          0                                ACTIVE   05-NOV-09
  20.         0          0                                ACTIVE   05-NOV-09
  21.  
  22.   COMMAND      USER# USERNAME                       STATUS   LOGON_TIM
  23. ---------- ---------- ------------------------------ -------- ---------
  24.         0          0                                ACTIVE   05-NOV-09
  25.         0          0                                ACTIVE   05-NOV-09
  26.         0          0                                ACTIVE   05-NOV-09
  27.         0          0                                ACTIVE   05-NOV-09
  28.         0          0                                ACTIVE   05-NOV-09
  29.         0          0                                ACTIVE   05-NOV-09
  30.         0          0                                ACTIVE   05-NOV-09
  31.  
  32. 18 ROWS selected.
  33.  
  34. SQL> CREATE USER pepe IDENTIFIED BY pepe;
  35.  
  36. USER created.
  37.  
  38. SQL> GRANT CONNECT, resource TO pepe;
  39.  
  40. GRANT succeeded.
  41.  
  42. SQL> GRANT SELECT, INSERT, UPDATE ON SYS.EJEMPLO TO pepe;
  43.  
  44. GRANT succeeded.
  45.  
  46. SQL> exit
  47.  
  48. oracle@marian:~$ sqlplus pepe/pepe                                                    
  49.  
  50. SQL*Plus: Release 10.2.0.1.0 - Production ON Thu Nov 5 15:39:45 2009
  51.  
  52. Copyright (c) 1982, 2005, Oracle.  ALL rights reserved.
  53.  
  54.  
  55. Connected TO:
  56. Oracle DATABASE 10g Enterprise Edition Release 10.2.0.1.0 - Production
  57. WITH the Partitioning, OLAP AND DATA Mining options                  
  58.  
  59. SQL> SELECT * FROM SYS.EJEMPLO;
  60.  
  61.   COMMAND      USER# USERNAME                       STATUS   LOGON_TIM
  62. ---------- ---------- ------------------------------ -------- ---------
  63.         0          0                                ACTIVE   05-NOV-09
  64.         3         60 PEPE                           ACTIVE   05-NOV-09
  65.         0          0                                ACTIVE   05-NOV-09
  66.         3          0 SYS                            ACTIVE   05-NOV-09
  67.         0          0                                ACTIVE   05-NOV-09
  68.         0          0                                ACTIVE   05-NOV-09
  69.         0          0                                ACTIVE   05-NOV-09
  70.         0          0                                ACTIVE   05-NOV-09
  71.         0          0                                ACTIVE   05-NOV-09
  72.         0          0                                ACTIVE   05-NOV-09
  73.         0          0                                ACTIVE   05-NOV-09
  74.  
  75.   COMMAND      USER# USERNAME                       STATUS   LOGON_TIM
  76. ---------- ---------- ------------------------------ -------- ---------
  77.         0          0                                ACTIVE   05-NOV-09
  78.         0          0                                ACTIVE   05-NOV-09
  79.         0          0                                ACTIVE   05-NOV-09
  80.         0          0                                ACTIVE   05-NOV-09
  81.         0          0                                ACTIVE   05-NOV-09
  82.         0          0                                ACTIVE   05-NOV-09
  83.         0          0                                ACTIVE   05-NOV-09
  84.         0          0                                ACTIVE   05-NOV-09
  85.  
  86. 19 ROWS selected.
  87.  
  88.  
  89.  
  90.  

Te podria servir... nunca se sabe  :P
En línea

-Ramc-


Desconectado Desconectado

Mensajes: 495



Ver Perfil
Re: [DUDA]PL/SQL en v$session
« Respuesta #8 en: 5 Noviembre 2009, 20:54 pm »

No puedo afirmartelo lo siento.

Pero porque no creas una vista copia de v$session solo con los campos que deseas obtener ver? y dicha vista otorgale permisos a X usuario para que este usuario cree un procedimiento almacenado (si es requerido) para ver dichos datos llamando los campos de esa vista nueva?
Pero, si creo una vista copia, es lo mismo que con la vista original, no puedo crearle trigger, así que tendría que sacarle los datos, guardarlos en mi tabla y consultarlos como haría con v$session la original.

O sea, necesito sacar el campo command cada vez que se modifique y guardarlo en otra tabla con la fecha actual y el usuario que lo hizo, pero, no puedo ponerle el trigger a v$session, ni a la vista creada de el.  :-\

EDIT: El error al intentar poner el trigger es:
Citar
Error report:
ORA-02030: can only select from fixed tables/views
02030. 00000 -  "can only select from fixed tables/views"
*Cause:    An attempt is being made to perform an operation other than
           a retrieval from a fixed table/view.
*Action:   You may only select rows from fixed tables/views.
« Última modificación: 5 Noviembre 2009, 20:57 pm por -Ramc- » En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: [DUDA]PL/SQL en v$session
« Respuesta #9 en: 5 Noviembre 2009, 21:17 pm »

Hasta lo poco que me concierne, no es posible crear triggers en vistas  del esquema SYS  ;) sugeri la creacion de una copia a v$session por si ibas a trabajar sobre otro usuario y no SYSTEM. Tambien recuerda que las vistas reflejan todo en tiempo real, no es una tabla estatica que no se actualiza al menos que intervenga manos humanas.

Podrias crear tu evento con DBMS_SCHEDULER que se reproduzca cada 60 segundos (1 minuto) y llame los datos en ese tiempo y te vaya haciendo un log spool en un archivo fisico, o en una tabla o donde gustes de todo lo que ocurra cada 60 segundos sobre los campos que te interesan de v$session. (Pero esto no seria en tiempo real) sino cada 60 segundos.


« Última modificación: 6 Noviembre 2009, 05:20 am por ^TiFa^ » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[DUDA]Como inicio session segura en el foro?
Sugerencias y dudas sobre el Foro
wACtOr 6 4,152 Último mensaje 1 Diciembre 2010, 02:42 am
por Carloswaldo
ayuda session php
PHP
kakashi20 3 3,854 Último mensaje 2 Febrero 2011, 02:25 am
por kakashi20
php session
PHP
ime 2 2,281 Último mensaje 18 Junio 2013, 15:53 pm
por ime
Seguridad en $session
PHP
basickdagger 3 2,145 Último mensaje 10 Mayo 2014, 20:06 pm
por engel lex
ataques weak session ids « 1 2 »
Nivel Web
tecasoft 10 7,191 Último mensaje 1 Diciembre 2017, 15:20 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines