Re: "Limpiar" asignación de permisos a objetos en esquema.

From: Federico Pascual <federico(dot)pascual(at)gmail(dot)com>
To: Juan José Santamaría Flecha <juanjo(dot)santamaria(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: "Limpiar" asignación de permisos a objetos en esquema.
Date: 2019-07-30 17:00:10
Message-ID: CA+HzAnnnP7Y2Jco+crBeq-xNmJ7biKr=eft=R41XEDtmcjmq8Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Juan José,
Hola. Bárbaro che, muchicimas gracias.
Es exactamente esto lo que quiero, solo voy a exeptuar los usuarios del
sistema (pg_signal_backend, etc.).
Pensé por un momento que podía existir alguna alternativa del tipo "...
from all roles" como decis, pero tu solución se ajusta a lo que queremos
hacer. La reasingación del owner correcto y los permisos correspondientes
se hace a travez de otro script que ya está resuelto.

Saludos y muchas gracias nuevamente.
Federico.

El mar., 30 jul. 2019 a las 13:12, Juan José Santamaría Flecha (<
juanjo(dot)santamaria(at)gmail(dot)com>) escribió:

> On Tue, Jul 30, 2019 at 3:24 PM Federico Pascual
> <federico(dot)pascual(at)gmail(dot)com> wrote:
> >
> > Yo quisiera algo como:
> >
> > revoke all privileges on all tables on schema <schema name> from all
> fucking world;
> >
> > Esta es la referencia más cercana que encontré a lo que quiero:
> >
> http://www.postgresonline.com/journal/index.php?/archives/221-Bulk-Revoke-of-Permissions-for-Specific-GroupUser-role.html
> >
> > Quisiera evitar tener que exportar la db con la cláusula que evita la
> asignación de permisos para tener que reimportarla.
> >
>
> De la lógica que quieres, la única parte que no puedes hacer en una
> única instrucción es el 'from all roles'. Tienes que iterar por cada
> uno de los roles a los que les vas a hacer el 'revoke'. En cualquier
> caso, te recomendaría no quitar los privilegios a los dueños del
> esquema.
>
> Con SQL encadenado puedes generar las instrucciones. Y con PL/pgSQL
> puedes automatizarlo:
>
> DO $$
> DECLARE rol record;
> BEGIN
> FOR rol IN
> SELECT r.rolname, nsp.nspname
> FROM pg_roles r
> CROSS JOIN pg_namespace nsp
> WHERE nsp.nspowner <> r.oid AND nsp.nspname = '<schema_name>'
> LOOP
> RAISE NOTICE 'REVOKE ALL ON ALL TABLES IN SCHEMA % FROM %',
> rol.nspname, rol.rolname;
> RAISE NOTICE 'REVOKE ALL ON ALL SEQUENCES IN SCHEMA % FROM %',
> rol.nspname, rol.rolname;
> RAISE NOTICE 'REVOKE ALL ON ALL FUNCTIONS IN SCHEMA % FROM %',
> rol.nspname, rol.rolname;
> --EXECUTE 'REVOKE ALL ON ALL TABLES IN SCHEMA ' ||
> quote_ident(rol.nspname) || ' FROM ' || quote_ident(rol.rolname);
> --EXECUTE 'REVOKE ALL ON ALL SEQUENCES IN SCHEMA ' ||
> quote_ident(rol.nspname) || ' FROM ' || quote_ident(rol.rolname);
> --EXECUTE 'REVOKE ALL ON ALL FUNCTIONS IN SCHEMA ' ||
> quote_ident(rol.nspname) || ' FROM ' || quote_ident(rol.rolname);
> END LOOP;
> END$$;
>
> Asegúrate que esta es la funcionalidad que buscas antes de quitar los
> comentarios.
>
> Un saludo,
>
> Juan José Santamaría Flecha
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jose Mercedes Venegas Acevedo 2019-07-30 19:19:15 Re: "Limpiar" asignación de permisos a objetos en esquema.
Previous Message Juan José Santamaría Flecha 2019-07-30 16:12:26 Re: "Limpiar" asignación de permisos a objetos en esquema.