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.santama...@gmail.com>) escribió:

> On Tue, Jul 30, 2019 at 3:24 PM Federico Pascual
> <federico.pasc...@gmail.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
>

Reply via email to