FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Evitar que un usuario se conecte dos veces
En un BB.DD. con FB 2.5.6 quiero implementar un sistema para qu el mismo usuario no pueda conectarse desde dos puestos diferentes de forma simultánea. He estado dando vueltas por ahí y en el blog Firebird SQL encontré este código que usa una tabla y dos triggers:
Al conectarse a la BB.DD.: Al desconectarse Si entro una primera vez con un usuario, al tabla CONEXION queda así: Si ahora accedo con un segundo usuario, sin cerrar la sesión anterior, la tabla queda así: Sin embargo, si sin cerrar ninguna de las dos sesiones hago un SELECT sobre la tabla MON$ATTACHMENTS se muestra esto: Como se puede ver ambos usaurios están activos pero en la tabla CONEXION sólo se muestra el que ha entrado último. ¿Alguien me puede explicar la razón? No acabo de entender que puede estar pasando. |
#2
|
||||
|
||||
No recuerdo bien cómo iba esa tabla, pero parece que están conectados 3 ususarios: sysdba, juani y angel.
Hay otro sysdba que no está conectado (o está inactivo), mon$state=0 y los demás están en con el valor 1. |
#3
|
||||
|
||||
Que alocada razón hay para imponer tal restricción?
__________________
El malabarista. |
#4
|
||||
|
||||
Cita:
¿Y que sentido tiene que el mismo usuario pueda abrir sesión en dos puestos diferentes? Lo entiendo como medida de seguridad. |
#5
|
||||
|
||||
Cita:
En teoría así sólo borraría aquellas filas de la tabla Conexion que en MON$ATTACHMENTS estuvieran con estado 0 ya que eso significaría que el usuario está inactivo. Pero no, sigue borrando la fila del usuario ANGEL a pesar de que no debería. Sin embargo, si ejecuto ese trozo del trigger (DELETE) desde SQLManager no borra ninguna entrada. CAda vez lo entiendo menos. |
#6
|
||||
|
||||
He estado hacienod algunas pruebas con SQLManager y he llegado a la conclusión que aparece un usuario sysdba por cada pestaña que se tiene abierta y otro más (que ha de ser el mon$state=0) que corresponde al propio SQLManager.
|
#7
|
||||
|
||||
Mira si te sirve esto.
|
#8
|
||||
|
||||
Gracias por la sugerencia. El problema que veo yo, y no me explico, es por qué funciona distinto ese DELETE FROM si está dentro o fuera del trigger ya que como he comentado: si se ejecuta dentro del trigger borra todas las filas que haya independientemente del estado; si se ejecuta fuera deja las que están activas. Veo que la solución pasa por ejecutar el DELETE antes de que se lance el trigger.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Evitar que un usuario se conecte más de una vez | Angel.Matilla | Conexión con bases de datos | 13 | 24-04-2017 13:46:58 |
Evitar que aplicacion se ejecute varias veces | sonjeux | Varios | 5 | 08-04-2009 02:32:07 |
evitar ejecutar la misma aplicacion 2 veces | noe | API de Windows | 13 | 26-05-2008 19:30:03 |
Como evitar que una apicacion se ejecute dos veces. | manitoba | C++ Builder | 4 | 28-05-2007 16:50:04 |
evitar precionar dos veces F3 para cerrar una forma.... | Arturo | Varios | 3 | 29-08-2005 18:12:42 |
|