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
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. |