Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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é
Hors ligne