suso escribió:
> Hola Alvaro que tal!, gracias por responder
>>> Hola de nuevo, tengo un par de "dudillas", que son:
>>>
>>> 1 - Es posible crear algún tipo de rol, ya sea de grupo o login,   
>>> especial, que solo tenga permisos de lectura de la base de datos
>>
>> Claro.  Debes asegurarte de revocar los privilegios a PUBLIC de todos
>> los objetos para que esto tenga efecto.  (Normalmente uno hace REVOKE a
>> ese rol, pero el rol sigue teniendo acceso; la explicación es que el
>> privilegio se obtiene porque PUBLIC los tiene).  Luego le das GRANT
>> SELECT en las tablas que te interesen.  Observa también que debes
>> otorgar privilegios a tablas y esquemas separadamente.
>>
> Es decir, solo hacer un REVOKE a el/os rol/es de login y/ grupos , y en  
> función de eso, lo hago para cada tablas o lo que tenga acceso ese/os  
> rol/es.

Además debes hacer

REVOKE bla bla FROM PUBLIC;


>
> 1 - Mi intención es  crear 2 "grupos", uno con acceso completo a todas  
> las tablas de datos, y lo que sea necesario (pero no de superusuario), y  
> otro grupo que sólo según el caso, o bien sólo ver unas determinadas  
> tablas de datos, o verlas todas pero solo "ver", ningún tipo de  
> modificación, por eso el tema de controlar ese acceso y enviar  
> "mensajes", cuando alguien que no tiene los permisos adecuados decirle  
> "oye, esto no puedes hacerlo", pero quizás, eso se podría hacer con un  
> trigger, y un SP, es correcto?
> Pero aún así, me haría falta obtener  por código "el tipo de permiso"  
> que tiene esa persona, pq según sea, le bloqueo el acceso a ciertas  
> partes del programa, no sólo a las tablas, no sé si me explico.

Ya entiendo.  Supongo que lo que debes hacer es asignar cada uno de esos
permisos a distintos roles de no-login, y luego otorgarle esos roles a
los otros roles (que son los de login).

Puedes saber si el rol actual "tiene" tal o cual rol usando la función
pg_has_role, y usar eso para activar los distintos módulos en tu
aplicación:

alvherre=# create role lectura_sobre_tablas nologin;
CREATE ROLE
alvherre=# create role pedro;
CREATE ROLE
alvherre=# grant lectura_sobre_tablas to pedro;
GRANT ROLE

--- acá un ejemplo de cómo obtener la info si ya eres ese usuario:
alvherre=# set session authorization pedro;
SET
alvherre=> select pg_has_role('lectura_sobre_tablas', 'usage');
 pg_has_role 
-------------
 t
(1 fila)

-- ejemplo de cómo obtenerlo cuando eres algún otro usuario:
alvherre=> reset session AUTHORIZATION ;
RESET
alvherre=# select pg_has_role('pedro', 'lectura_sobre_tablas', 'usage');
 pg_has_role 
-------------
 t
(1 fila)



-- 
Alvaro Herrera                 http://www.amazon.com/gp/registry/DXLWNGRJD34J
"El número de instalaciones de UNIX se ha elevado a 10,
y se espera que este número aumente" (UPM, 1972)
--
TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo

Responder a