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 >