Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Una de Usuarios (https://www.clubdelphi.com/foros/showthread.php?t=44652)

sitrico 12-06-2007 01:25:27

Una de Usuarios
 
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í:

Código SQL [-]
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:
Código SQL [-]
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

Código SQL [-]
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)

Código SQL [-]
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

Cita:

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

Cita:

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

Resp
 
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.


La franja horaria es GMT +2. Ahora son las 07:06:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi