Bonjour,

Pour vous expliquez mon problème je vais partir d'un exemple :

En plus du schema 'public', j'ai un autre schema 'concept' qui est n'est pas accessible à tout le monde:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
CREATE SCHEMA concept;
REVOKE ALL ON SCHEMA concept FROM PUBLIC;
Dans ce schema j'ai une table personne:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
CREATE TABLE concept.personne (
    id_personne SERIAL PRIMARY KEY,
    nom VARCHAR(255),
    prenom VARCHAR(255)
);
(Pour rappel, cette table n'est pas accessible à public).

Dans le shema public, je crée une vue à travers laquelle il est possible de consulter et d'insérer de nouvelle lignes dans la table personne du shema concept, et ça pour tout le monde.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
CREATE VIEW public.personne AS 
SELECT * FROM concept.personne;
 
CREATE RULE personne_ins AS ON INSERT TO personne
    DO INSTEAD
    INSERT INTO concept.personne (nom, prenom) VALUES (NEW.nom, NEW.prenom);
 
GRANT SELECT, INSERT ON public.personne TO public;
Ensuite je me connecte à la base de données sous un autre utilisateur. Et j'essaye d'insérer une ligne dans la vue public.personne.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
INSERT INTO public.personne (nom, prenom) VALUES ('Michelle', 'DUPUIT');
Normalement, l'insertion aurait dû se passer sans problème, or postgresql m'affiche l'erreur suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
ERROR:  permission denied for sequence person_id_person_seq
Pourtant je fais bien l'insertion sur la vue public.personne, et la régle de la vue sur l'INSERTION devrait effectuer l'insertion sur la table concept.personne sans posser de problème de droits.

Est-ce qu'il y a quelque chose qui m'échappe sur l'utilisation des vues, ou est-ce un fonctionnement normal de Postgresql?