Hola de nuevo Alvaro, garcias por contestar
Pensé que sería mas "sencillo" (quizás lo sea, pero me cuesta aprenderlo pq soy muy nuevo en esto), pero como se suele decir, con paciencia y una caña( y mucho leer) se aprende a pescar:) Con tu info, ya tengo para empezar, miraré como se hace, y me documentaré para no "meter la pata":)
Muchas gracias de nuevo
Un saludo
Suso


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)





------------------------------------------------------------------------


Se certificó que el correo entrante no contiene virus.
Comprobada por AVG - www.avg.es Versión: 8.5.329 / Base de datos de virus: 270.12.33/2120 - Fecha de la versión: 05/18/09 06:28:00


--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net

Responder a