PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  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  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Grant / Revoke sur toutes les tables Ă  la fois ?

Technique - Langages Procéduraux (PL) | Grant / Revoke sur toutes les tables à la fois ?

Par jonathan.dupre le 17/06/2008 - 10:21

Bonjour, encore une fois je me retouve avec un lèger problème avec postgres.
Dans ma base de données je possède 67 tables, quelques roles et des utilisateurs.
Comme ces derniers n'ont pas tous les mêmes droits (des GRANT différents) j'ai pondu une petite fonction qui se charge de lister mes tables et d'affecter les bons droits.

Seulement visiblement Postgres n'aime pas le nom de tables en variable....

Voici ma fonction :

CREATE OR REPLACE FUNCTION appliquer_droits() RETURNS varchar AS $$
DECLARE
cTables RECORD;
myTable varchar(32);
cSequences RECORD;
cFunctions RECORD;
cNameSpaces RECORD;
retour varchar(1000) := 'Droits appliqués !';
BEGIN
/* Droits concenant les tables */
FOR cTables IN
SELECT tablename
FROM pg_tables
WHERE schemaname = 'compagnie'
LOOP
myTable :=cTables.tablename;
REVOKE SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER ON TABLE " || myTable || " FROM administrateur;
REVOKE SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER ON TABLE " || myTable || " FROM super_user;
REVOKE SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER ON TABLE " || myTable || " FROM utilisateur;
REVOKE SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER ON TABLE " || myTable || " FROM visiteur;
REVOKE SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER ON TABLE " || myTable || " FROM connexion_db;

GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER ON TABLE " || myTable || " TO administrateur;
GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER ON TABLE " || myTable || " TO super_user;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE " || myTable || " TO utilisateur;
GRANT SELECT ON TABLE " || myTable || " TO visiteur;
END LOOP;

GRANT SELECT ON TABLE "GROUPE_UTILISATEUR" TO connexion_db;
GRANT SELECT ON TABLE "UTILISATEUR" TO connexion_db;

RETURN retour;
END;
$$ LANGUAGE 'plpgsql';

select appliquer_droits();

Il me dit : ERREUR: la relation « || myTable || » n'existe pas

Je ne vois pas ce qui cloche.

Merci.

Jonathan

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Utiliser execute

SAS/ = 17 Juin, 2008 - 16:11

Bonjour,

Pour pouvoir utiliser la concaténation de variables dans une requête, vous devriez regarder du côté de la directive "EXECUTE".

Voir ici :
http://docs.postgresqlfr.org/8.3/plpgsql-control-structures.html

Librement,
Stéphane Schildknecht
Dalibo
PostgreSQLFr


© PostgreSQLFr, tous droits rĂ©servĂ©s.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.