IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Selectionner toutes les tables


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 8
    Points : 8
    Points
    8
    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 !

  2. #2
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 150
    Points
    150
    Par défaut
    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)

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    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.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 150
    Points
    150
    Par défaut
    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.

  5. #5
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 150
    Points
    150
    Par défaut
    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';

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/10/2010, 19h01
  2. [SQL Server]La liste de toutes les tables
    Par Husqvarna dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/09/2008, 16h21
  3. Selectionner tout les elements d'un table
    Par ganga dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/06/2006, 09h58
  4. Mettre à false toutes les tables d'un projet
    Par tomm dans le forum Bases de données
    Réponses: 9
    Dernier message: 28/05/2006, 00h36
  5. Sélection de toute les tables d'une base
    Par lord_paco dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/07/2003, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo