Vous n'êtes pas identifié(e).
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
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
yep, ok merci, ça a marché
Hors ligne