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:
1 2
| CREATE SCHEMA concept;
REVOKE ALL ON SCHEMA concept FROM PUBLIC; |
Dans ce schema j'ai une table personne:
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.
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.
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 :
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?
Partager