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

Responder a