Jaime Casanova escribió:
2010/3/10 Oswaldo Hernández <lis...@soft-com.es>:
Hola,
Tengo una sesión abierta con un usuario y en un momento dado cambia el
operador de la maquina. El operador saliente cierra sus transacciones y a
continuación el nuevo operador debe identificarse con sus datos.
Las identificaciones las realizo a nivel de roles de base de datos por lo
que me gustaría saber si:
¿Es posible cambiar de usuario en una sesión activa sin necesidad de cerrar
y volver a reabrir la conexión?
He estado viendo SET SESSION AUTHORIZATION pero según la documentación hace
que un usuario con privilegios cambie a un usuario sin privilegios, lo cual
no es este caso.
SET SESSION AUTHORIZATION te sirve siempre que primero te hayas
conectado como un superusuario, por ejemplo (fijate que la segunda vez
no regrese al usuario postgres antes de cambiar de usuario):
postgres=# select current_user, session_user;
current_user | session_user
--------------+--------------
postgres | postgres
(1 fila)
postgres=# set session authorization eduardo;
SET
postgres=> select current_user, session_user;
current_user | session_user
--------------+--------------
eduardo | eduardo
(1 fila)
postgres=> set session authorization jcm;
SET
postgres=> select current_user, session_user;
current_user | session_user
--------------+--------------
jcm | jcm
(1 fila)
Gracias por tu respuestas Jaime, pero he descartado esto porque
necesitaría que la aplicación conociera la contraseña del superusuario
para realizar la conexion inicial, y preferiría evitarlo. Además el
cambio de usuario con set session authotization se realiza sin necesidad
de password, solo con el nombre, con lo cual seria la aplicación la que
tendria que verificar el password registrado para el rol, lo cual no se
si es posible.
Las aplicaciones de pooling como pgpool deben de hacerlo de alguna
forma, si no, no podrian reutilizar las conexiones, intentaré investigar
como lo hacen.
Saludos,
--
Oswaldo Hernández
--
TIP 8: explain analyze es tu amigo