PDA

Ver la Versión Completa : Una de Usuarios


sitrico
12-06-2007, 01:25:27
Bueno, ya estoy terminando mi aplicación y tengo que comenzar a validar lus usuarios permisos y esas cosas, (si quizá ubiese podido empezar conjuntamente :o ) el punto es que quisiera usar el gestor de usuarios de firebird básicamente current_user, por lo que debo crear unos usuaris y dominios. (el IbExpert no me ayuda así que los Grant serán a mano).

El punto es: ¿ como puedo identificar un IdUsuario (integer) a partir del Current_User (es un char de 15) ? me explico:

Al realizar insersiones uso +- algo así:

INSERT INTO CI_CITAS
(IDCITA, IDPACIENTE, FCHCITA, HORA, USUARIO, OBSERVACIONES) VALUES
(NULL, :IDPACIENTE, :FCHCITA, :HORA, current_user, :OBSERVACIONES)

hay alguna manera (del lado del servidor) de usar un campo como current_User_ID (integer) no me gustan mucho los campos clave Char ;)

Edito: se me olvidava.

Hay alguna manera de evitar que un mismo usuario se conecte más de 1 vez (ni siquiera he probado conectarme con un usuario que no sea sysdba)

TJose
12-06-2007, 05:58:43
Hola sitrico

no entiendo bien cual es la duda.
los usuarios, son usuarios registrados en el servidor, no en una tabla de la base de datos.
current_user te devuelve el usuario, actualmente conectado desde la conexión activa, y que está registrado en el servidor. Si existen los usuarios juan, pedro y jose, cada uno accediendo desde un cliente diferente, por ejemplo, la consulta:
select current_user from T
devolverá juan, pedro y jose respectivamente para cada conexión.

Saludos
TJose

sitrico
12-06-2007, 07:24:38
Tengo entendido que current_user devuelve el nombre del usuario que inicio la conexión con el servidor. (venga el que escribio el login y password).

En el caso que explique al inicio debería funcionar así:

Pongo en el datamodule el loginPrompt a true;

El usuario escribirá su nombre de usuario y contraseña.

Si pido el current_user me debe devolver el nombre del usuario indicado antes (loginPrompt ). Los permisos y restricciones de cada usuario los definiré por roles. (Ya preguntaré sobre ello).

Pero la pregunta original era: Hay alguna una manera de usar un Id (un valor integer) en lugar del Char(15) que devuelve current_user.

Supongo que tendré que crear una tabla

Create Table Usuarios (
UserName Char(15) not null,
IdUser Integer,
Bla...bla...bla

Y luego en un trigger before insert /update (en las tablas que corresponde) hago algo como

(no estoy muy claro en la sintaxis exacta pero creo que la puedo resolver con paciencia)

If (New.IdUser is null) Then
New.IdUser = select IdUser from usuarios Where UserName = Current_User

Aunque si es esa la única opción, prefiero escribir directo el current_user en las tablas :D

TJose
12-06-2007, 15:33:24
Si pido el current_user me debe devolver el nombre del usuario indicado antes (loginPrompt ). Los permisos y restricciones de cada usuario los definiré por roles. (Ya preguntaré sobre ello).
Esto es correcto

Pero la pregunta original era: Hay alguna una manera de usar un Id (un valor integer) en lugar del Char(15) que devuelve current_user.

Quizá si, pero no tiene mucho sentido (a mi parecer), ya que que los usuarios están registrados en otra base de datos (security2.fdb en FB2.x) y se puede perder la referencia en cualquier momento. Qué sucede si quieres llevar la base de datos a otro servidor? Sería mucha casualidad que se mantenga la relacion id <---> usuario.
Por otro lado a security2.fdb deberías acceder como sysdba.

Saludos
TJose

rastafarey
13-06-2007, 20:17:27
Mira te voy a dar una idea de como yo trabajo la aprte usuarios.

Uso una tabla de usuarios y no la de seguridad de sgdbd.

Cada cuando alguien se conecta creo una variable dentro del deposito de variables en la parte de las sesiones que contiene el id del usuario que esta coneptado de esta manera tengo informacion del usuario que esta conectado. Pero esto es valido si es tu tabla y no la de sistema.