Vous n'êtes pas identifié(e).
Bonjour à tous,
Je travaille sur des bases supérieures à 8.0 sous Red-Hat et Cent-OS.
Même aprés la lecture de différents chapitres de la Doc, j'ai un peu de mal à mettre en oeuvre la sécurité, à créer les rôles et donner les droits.
Auriez-vous quelques liens vers des Tutos, exemples, ... ?
D'avance merci.
Hors ligne
En ce qui me concerne je n'en connais pas, j'ai toujours travaillé à partir de la doc. Mais c'est vrai qu'elle est assez légère, et un peu fragmentée sur ce sujet.
Marc.
Hors ligne
Bonjour Mortimer.pw,
Peut-être que cet article, assez vieux, de notre éminent gleu local pourra faire l'affaire ?
http://blog.postgresql.fr/index.php?post/drupal/137
Tenez nous au courant
Bonne journée,
Jean-Paul Argudo
https://www.postgresql.fr
https://www.crunchydata.com
Hors ligne
Bonjour à tous,
J'ai une appli JAVA qui toune en local sur la machine de mon Serveur PostgreSQL.
Cette appli posséde un fichier de configuration où est décrit la connexion à la BD test :
<DATABASE>
<DRIVER>org.postgresql.Driver</DRIVER>
<URL>jdbc:postgresql://localhost:5432/test</URL>
<UID>toto</UID>
<PWD>titi</PWD>
<SCHEMA_GEO>monschema</SCHEMA_GEO>
<SQLSTATE_CONNECTION>S1000</SQLSTATE_CONNECTION>
</DATABASE>
J'ai ajouté à mon fichier pg_hba.conf la ligne suivante :
host test toto 127.0.0.1/32 md5
J'ai créé les rôles et donné les droits suivants :
CREATE ROLE BASIC_monschema NOINHERIT;
GRANT USAGE ON SCHEMA monschema TO BASIC_monschema;
GRANT SELECT ON ALL TABLES IN SCHEMA monschema TO BASIC_monschema;
CREATE ROLE toto NOINHERIT LOGIN ENCRYPTED PASSWORD 'titi' IN ROLE BASIC_monschema;
Lorsque j'exécute l'appli JAVA, j'obtiens le message suivant dans les logs :
127.0.0.1 20829 2011-05-20 12:11:31 CEST PARSE 1 ERROR: permission denied for schema monschema at character 166
127.0.0.1 20829 2011-05-20 12:11:31 CEST PARSE 2 STATEMENT: select id_test,lib_test from monschema.matabletest;
Est-ce que j'ai oublié quelque chose ?
Dernière modification par mortimer.pw (20/05/2011 12:25:43)
Hors ligne
De ce que je vois, nulle part vous ne dites à PostgreSQL qui toto fait partie de BASIC_monschema
Marc.
Hors ligne
Je viens de modifier la précédente réponse pour dire que j'ai également créé le rôle :
CREATE ROLE toto NOINHERIT LOGIN ENCRYPTED PASSWORD 'titi' IN ROLE BASIC_monschema;
excusez-moi.
Hors ligne
Ok. Mettez toto en INHERIT, ça devrait mieux marcher. Sans cela, il n'a pas les privilèges de BASIC_monschema par défaut (il faudrait faire un SET ROLE BASIC_monschema dans la session pour qu'il les ait)
Marc.
Hors ligne
Ok cela fonctionne.
Merci Marc de m'aider à progresser.
Hors ligne
C'est bien le principe de ce forum
Marc.
Hors ligne
Je reçois à présent des mails d'erreur de l'appli JAVA :
ERROR: permission denied for sequence test_id_seq
Cela laisse penser que mon utilisateur ne peut pas faire d'INSERT dans une table qui possède une séquence.
Je vais donc ajouter le droit : GRANT USAGE on ALL SEQUENCES IN SCHEMA monschema.
La notion USAGE n'est pas claire pour moi. Je lis dans la doc "autorise l'accès aux objets contenus dans le schéma ".
Mon : GRANT USAGE ON SCHEMA monschema TO BASIC_monschema; n'est-il pas suffisant ?
Hors ligne
Non, c'est exactement comme donner le droit de lecture sur un répertoire, et pas sur ces fichiers: vous avez le droit de voir le contenu du répertoire, mais pas d'ouvrir les fichiers pour autant.
Dans un schéma, vous avez des tables, des vues et des séquences. Et chaque objet a ses droits d'accès.
Pour récupérer une valeur d'une séquence, vous n'avez besoin que d'usage.
Marc.
Hors ligne
Bonjour à tous,
Je viens de créer un rôle USER_BASIC (cet Utilisateur peut uniquement consulter les tables du schema TEST) :
CREATE ROLE user_basic INHERIT LOGIN ENCRYPTED PASSWORD 'user_basic1' IN ROLE GROUPE_BASIC;
Le rôle GROUPE_BASIC est défini comme suit :
CREATE ROLE GROUPE_BASIC NOINHERIT;
GRANT USAGE ON SCHEMA TEST TO GROUPE_BASIC;
GRANT SELECT ON ALL TABLES IN SCHEMA TEST TO GROUPE_BASIC;
Cet utilisateur peut utiliser l'outil PgAdmin pour ces consultations.
Est-il possible d'empêcher l'affichage des autres Schémas et de leurs contenus ?
De façon plus générale, est-il possible d'empêcher la consultation de toutes autres informations que celles définies dans les groupes et droits ?
Je pense notamment au PUBLIC.
Hors ligne
Il n'y a aucun privilège à révoquer, qui empêcherait de voir la description des tables. Même si on n'a pas USAGE sur le schéma, on pourra voir la liste et la description des tables du schéma. On ne pourra pas voir leur contenu par contre.
Marc.
Hors ligne
Bonjour Marc,
D'accord, le principal étant qu'un simple utilisateur ne puisse accéder au contenu des tables.
Concernant Public, y-a-t'il des choses à sécuriser ?
Autre exemple, je vois que mon simple utilisateur peut consulter les tables pg_user, pg_stat_activity, ... Est-il possible d'empêcher cela ?
Hors ligne
Un utilisateur ne peut pas accéder au contenu des tables s'il n'a pas USAGE sur le schéma et SELECT sur la table.
Public est en usage pour tout le monde, par défaut.
Les tables systèmes, vous ne pourrez pas les «sécuriser», si vous changez les droits dessus, vous allez tout casser. Leur contenu n'est que la description des objets du catalogue.
Marc.
Hors ligne