> -----Mensaje original----- > De: jsgar...@seguridad.unam.mx > > Hola muchachos, espero que todos estén muy bien. > > Como esto de estar dando privilegios tabla por tabla resulta > muy tedioso cuando se necesita hacer un ALL PRIVILEGES sobre > todas las tablas de nuestra base, se me ha ocurrido hacer una > query así: > > GRANT ALL PRIVILEGES ON (SELECT viewname FROM pg_views > WHERE schemaname='public' > UNION > SELECT tablename FROM pg_tables WHERE schemaname='public' > UNION > SELECT relname FROM pg_statio_all_sequences WHERE > schemaname='public') TO prueba_permisos; > > Quizá algunos ya se imaginen que no sirvió :( > > Hay alguna forma de que esta query sí pueda servir? o más > bien que se construya una que haga lo que deseo????? >
Esta función te lo resuelve: CREATE OR REPLACE FUNCTION grant_all_privileges(p_user text, p_schema text) RETURNS void AS $BODY$ DECLARE objeto text; BEGIN FOR objeto IN SELECT tablename FROM pg_tables WHERE schemaname = p_schema UNION SELECT relname FROM pg_statio_all_sequences WHERE schemaname = p_schema LOOP RAISE NOTICE 'Asignando todos los privilegios a % sobre %.%', p_user, p_schema, objeto; EXECUTE 'GRANT ALL PRIVILEGES ON ' || p_schema || '.' || objeto || ' TO ' || p_user ; END LOOP; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; La usas así: select grant_all_privileges('postgres', 'temp'); Saludos, Fernando -- TIP 5: ¿Has leído nuestro extenso FAQ? http://www.postgresql.org/docs/faqs.FAQ.html