Muchisísimas gracias Fernando. Ya con esto, como tú lo has dicho, pude resolver mi problema. Lo he adecuado y ha funcionado perfectamente.

Un saludo y muchas gracias de nuevo¡¡¡¡¡¡¡¡¡

___________________________________________________________

Fernando Hevia <fhe...@ip-tel.com.ar> ha escrito:



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




----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

--
TIP 8: explain analyze es tu amigo

Responder a