Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/06/2005, 14h55   #1
Invité de passage
 
Inscription : février 2004
Messages : 8
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 8
Points : 2
Points : 2
Par défaut Selectionner toutes les tables

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 !
Maxime555 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2005, 19h14   #2
Membre habitué
 
Inscription : mai 2002
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 131
Points : 142
Points : 142
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)
Quentin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2005, 20h40   #3
Invité de passage
 
Inscription : février 2004
Messages : 8
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 8
Points : 2
Points : 2
Si tu veux détailler un peu plus stp Je ne vois pas comment parcourir toute les tables dans ce cas là.

Donc il n'ya pas d'équivalent au ALL_TABLES d'Oracle.
Maxime555 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2005, 21h57   #4
Membre habitué
 
Inscription : mai 2002
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 131
Points : 142
Points : 142
Là, j'ai pas la procédure sous les yeux, et j'ai un peu la flemme Mais demain matin, en arrivant au boulot, je ferai un copier/coller de la procédure que j'ai écrite.
Quentin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2005, 09h24   #5
Membre habitué
 
Inscription : mai 2002
Messages : 131
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 131
Points : 142
Points : 142
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 :
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';
Quentin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h49.


 
 
 
 
Partenaires

Hébergement Web