1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
CREATE OR REPLACE FUNCTION grantall()
RETURNS void AS
$BODY$
declare
--
-------------------------------------------------------------------
-- droits sur les tables, vues, procedures, sequences crees par omc
-------------------------------------------------------------------
--
-- declaration des variables
--
ll_id_omc integer;
ls_name varchar(128);
--
-- curseurs
--
-- liste des tables, vues et sequences dont il faut accorder les droits
cur_pgclass cursor for select pg_class.relname
from pg_class inner join pg_namespace on pg_class.relnamespace = pg_namespace.oid
where pg_class.relowner = ll_id_omc
and pg_namespace.nspname = 'public'
and pg_class.relkind in ('r', 'v', 'S'); -- regular tables, vues et sequences
--
-- liste des procedures avec leurs arguments (en utilisant le type systeme regprocedure)
cur_pgproc cursor for select cast( pg_proc.oid as regprocedure )
from pg_proc
where proowner = ll_id_omc;
begin
--
-- recuperation de l'id de l'utilisateur admin
select pg_shadow.usesysid
into ll_id_omc
from pg_shadow
where pg_shadow.usename = 'omc';
--
-- privileges pour les elements de pg_class : tables, vues, sequences...
--
open cur_pgclass;
--
loop
--
fetch cur_pgclass into ls_name;
--
-- termine ?
exit when not found;
--
-- application des privileges
execute 'GRANT ALL PRIVILEGES ON TABLE ' || quote_ident(ls_name) || ' TO GROUP ADM';
end loop;
--
close cur_pgclass;
--
-- privileges pour les procedures stockees
--
open cur_pgproc;
--
loop
--
fetch cur_pgproc into ls_name;
--
-- termine ?
exit when not found;
--
-- application des privileges
execute 'GRANT ALL PRIVILEGES ON FUNCTION ' || ls_name || ' TO GROUP ADM';
end loop;
--
close cur_pgproc;
--
-- return final
return;
end;
$BODY$
LANGUAGE 'plpgsql'; |
Partager