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

From: Juan José Santamaría Flecha <juanjo(dot)santamaria(at)gmail(dot)com>
To: Federico Pascual <federico(dot)pascual(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 16:12:26
Message-ID: CAC+AXB1rkw0PSqLjQhnMttpY23F3YpKP+j9Ug1ksJ_=QBB+qmA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 Federico Pascual 2019-07-30 17:00:10 Re: "Limpiar" asignación de permisos a objetos en esquema.
Previous Message Federico Pascual 2019-07-30 13:29:13 "Limpiar" asignación de permisos a objetos en esquema.