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