Bonjour,
j'ai une question simple mais dont je n'ai aps pu trouver la réponse :
je souhaiterais faire un GRANT sur toutes les tables et les séquences.
Y'a t'il un autre moyen que de le faire table par table ?
Merci d'avance !
Bonjour,
j'ai une question simple mais dont je n'ai aps pu trouver la réponse :
je souhaiterais faire un GRANT sur toutes les tables et les séquences.
Y'a t'il un autre moyen que de le faire table par table ?
Merci d'avance !
Y a pas de syntaxe particulière, donc la meilleure solution, c'est de créer un procédure stockée qui fait le boulot comme un grand à partir des catalogues systèmes (c'est ce que j'ai fait personnellement)
Si tu veux détailler un peu plus stpJe ne vois pas comment parcourir toute les tables dans ce cas là.
Donc il n'ya pas d'équivalent au ALL_TABLES d'Oracle.
Là, j'ai pas la procédure sous les yeux, et j'ai un peu la flemmeMais demain matin, en arrivant au boulot, je ferai un copier/coller de la procédure que j'ai écrite.
Comme promis, voici la fonction. En gros, tous les objets de ma base sont créés par le même utilisateur (nommé 'omc'), mais il faut que j'accorde tous les droits à un groupe particulier (le groupe 'adm'). Je te laisse adapter le code pour ton besoin![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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';
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager