Crear usuario sin privilegios

Hola gente. Les cuento la solicitud que me hicieron y espero a ver si se les ocurre algo.

Administro la base de datos del Mapuche y llegó un pedido de un grupo de desarrollo de la Facultad de Informática de nuestra universidad para acceder a información de docentes (legajo, apellido y nombre nomas) por lo que se decidió crear una vista con la consulta a la info en el esquema public para que sea accedida por un usuario específico desde la aplicación desarrollada en Toba.

La cuestión es restringirle el acceso a los otros esquemas de la base por lo que procedí a lo siguiente:

  • Crear un usuario usuario_prueba con login.
  • Al usuario usuario_prueba le configure la variable search_path to ‘public’ para que solo busque en el esquema public.
  • A los esquemas mapuche y uncoma les hice un revoke all from public y revoke all from usuario_prueba.
  • A la vista vw_dh01 le hice un grant select to usuario_prueba.

Desde pgAdminIII entro con usuario_prueba y accedo a la información de la vista como quería pero también accede a los esquemas mapuche y uncoma, no a los datos pero si a las definiciones de tablas, funciones y configuraciones.

Hay alguna forma de restringir el acceso a otros esquemas que no sean public?

Fijate en el punto en que haces los revoke si el comando no tendría que ser así:

REVOKE ALL ON SCHEMA mapuche FROM usuario_prueba;

Saludos, Nico.

Hola gente, vuelvo a la carga con este tema.

Luego de leer un poco y hacer algunas pruebas llego a lo siguiente:

  • Haciendo un usuario sólo con privlilegios de select sobre una vista del esquema public:
    • Al entrar por PGAdminIII el usuario tiene acceso a ver las definiciones en todos los esquemas. Definiciones de tablas, funciones, vistas, etc. en todos los esquemas del servidor.
    • Al entrar mediante psql, no tiene acceso mas que a la vista a la cual se le dio acceso.
    • El acceso a los datos dentro de las tablas en todos los esquemas se mantiene segun lo definido mediante grants y revokes. El usuario de prueba sólo tiene accesos de lectura (select) a la vista dentro del esquema public. No tiene acceso a los datos de ninguna otra tabla del esquema ni de otros esquemas.

Entiendo y leí en algún foro que el “problema” es de PGAdmin III, el cual al hacer la conexión al servidor levanta todas las definiciones de todos los esquemas dentro de las bases del servidor para luego guiarse por los permisos del usuario para mostrar o no los datos.

Hay alguna otra forma de ocultar las definiciones de otros esquemas que no sea public?
La otra forma que se me ocurre es “obligar” a los usuarios que me soliciten este tipo de usuarios a que implementen esto mediante WebServices pero no creo que quieran cambiar todos los sistemas que actualmente tienen acceso a datos de mi servidor.

Saludos!