Vous n'êtes pas identifié(e).

#1 16/05/2011 23:33:19

bebert73
Membre

recuperer des donnees par une fonction sans avoir acces aux tables

Bonjour,

Comment peut-on faire pour que certains utilisateurs puissent accéder à certaines tables uniquement au travers de fonctions, et jamais en accédant directement aux tables ?

J'ai essayé la chose suivante :

CREATE TABLE personnes (
   matricule SMALLINT PRIMARY KEY,
   nom VARCHAR(20)
);
-- aucun droit n'est attribué au rôle PUBLIC sur la table personnes

CREATE FUNCTION recup_personne(IN matricule SMALLINT) RETURNS VARCHAR AS $$
   SELECT nom FROM personnes WHERE matricule = $1;
$$ LANGUAGE SQL
GRANT EXECUTE ON FUNCTION recup_personne TO PUBLIC;

Je m'attendais à ce qu'un utilisateur lambda puisse exécuter la fonction "recup_personne", même s'il n'a aucun droit sur la table sous-jacente (personnes), mais j'obtiens l'erreur suivante
ERREUR:  droit refusé pour la relation personnes
CONTEXTE : fonction SQL « recup_personne », instruction 1

Y-a-t-il une astuce pour faire ça ?

Hors ligne

#2 16/05/2011 23:50:41

gleu
Administrateur

Re : recuperer des donnees par une fonction sans avoir acces aux tables

La procédure stockée doit être déclarée SECURITY DEFINER pour qu'elle soit exécutée sous le rôle de l'utilisateur propriétaire de la procédure stockée. Autrement dit, elle doit être créée par une personne qui a le droit d'accès à cette table.


Guillaume.

Hors ligne

#3 17/05/2011 00:00:17

bebert73
Membre

Re : recuperer des donnees par une fonction sans avoir acces aux tables

yep, ok merci, ça a marché smile

Hors ligne

Pied de page des forums