PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Sécurité » Droits sur tous les schémas d'une base de données » 22/10/2018 12:06:50

Bonjour et un grand merci pour votre réponse. J'ai repris tous les tests ce matin et cette fois, ça fonctionne conformément à vos différents messages. Vendredi, j'avais quelque chose de bizarre : l'utilisateur créateur de la table ne pouvait pas accéder à celle-ci en lecture/écriture alors qu'il pouvait modifier sa structure...
Bref, j'ai ajouté des "encrypted password" pour assigner un mot de passe à la suite de chaque création de rôle et remplacé la ligne "GRANT USAGE,CREATE ON schema s to u1,u2,u3;" par "GRANT USAGE,CREATE ON schema s to read_only;" et ça fonctionne toujours.
Je pense donc que vendredi je me suis embrouillé dans mes tests.
Encore merci pour toutes vos explications et votre patience.
Philippe NICOLAS

#2 Re : Sécurité » Droits sur tous les schémas d'une base de données » 19/10/2018 17:52:59

Si je fais ça, ça ne marche pas car, comme je l'ai constaté, il ne peut pas y avoir plusieurs "cédant" (grantor) pour un même bénéficiaire (grantee - ici le groupe read_only). J'ai donc une erreur "ERROR: ERREUR: droit refusé pour la relation test1 " sur la commande insert. En fait c'est le dernier "Alter default privilege" qui modifie le précédent s'il y a entre les deux 2 grantor ou grantee identiques (on voit ça très bien sur l'interface de pgadmin).
J'ai exactement déroulé votre script. Je pense donc que, si vous essayez, vous devriez avoir le même comportement.

En vous remerciant pour toute l'aide apportée,

Philippe NICOLAS

#3 Re : Sécurité » Droits sur tous les schémas d'une base de données » 19/10/2018 13:53:29

merci pour votre patience. Cette fois, ça fonctionne.
Philippe NICOLAS

#4 Re : Sécurité » Droits sur tous les schémas d'une base de données » 19/10/2018 12:16:30

Pour ma question idiote, j'ai la réponse : j'ai fait un create "create language plpgsql" sur ma base et il me répond "ERROR: ERREUR: le langage « plpgsql » existe déjà". J'en déduis donc qu'il faut saisir le code dans la fenêtre SQL de pgAdmin 4. Du coup, pourquoi ai-je une erreur de syntaxe sur "DECLARE" ?

#5 Re : Sécurité » Droits sur tous les schémas d'une base de données » 19/10/2018 11:01:44

Bonjour et encore merci.
1 - Je me suis sûrement mal exprimé. En fait, je voudrais que les droits soient affectés automatiquement à la table lors de sa création (je suis d'accord que le créateur de la table a, de base, tous les droits dessus). Avec les privilèges par défaut, ça fonctionne si j'ai 2 utilisateurs : je fais un alter default privileges in schema bassee for role u1 grant select on tables to u2 puis alter default privileges in schema bassee for role u2 grant select on tables to u1. Pour la 1ère ligne le "cédant" (grantor) est u1 et le bénéficiaire du droit select est u2. Donc quand u1 crée une table, il cède le droit select à u2. Pour la 2ème ligne, c'est u2 qui cède le droit select à u1 pour les tables qu'il crée. Le problème, c'est qu'on ne peut pas mettre 2 fois le même bénéficiaire (grantee) ou 2 fois le même "cédant" (grantor) ; donc, à partir de 3 utilisateurs, ça coince. D'autre part si c'est le groupe qui cède les droits, ça ne peut pas fonctionner puisque c'est l'utilisateur qui est propriétaire de sa table et non le groupe.
votre proposition "ALTER DEFAULT PRIVILEGES in SCHEMA nomduschema GRANT SELECT ON TABLES TO read_only" fonctionne pour l'utilisateur courant qui cède le droit (grantor). Du coup quand c'est l'autre utilisateur du schéma qui crée la table le droit select n'est plus affecté;
Je me casse la tête avec ça depuis plusieurs jours et je crois que je vais finir par faire un schéma dédié à chaque utilisateur... à moins qu'il y ait une solution.

2 - Question idiote : pour ce qui est du code donnant des droits sur tous les schémas, j'ai le message "erreur de syntaxe sur ou près de « DECLARE »". En fait j'utilise la fenêtre SQL de pgadmin 4. Sauf que le sql, ce n'est pas du pl/pgsql. Du coup, je cherche à savoir si pl/pgsql est bien implémenté avec ma version de postgresql (9.5) sur centOS 7 mais je n'y arrive pas. Pour utiliser pl/pgsql, il suffit de taper le code dans la fenêtre d'édition SQSL de pgAdmin ? Faut-il écrire un fichier ? Pour info, j'ai accès au serveur et je peux aussi me connecter en ligne de commande.
En tous cas, toutes vos indications me permettent de progresser et je vous en remercie


Philippe NICOLAS

#6 Re : Sécurité » Droits sur tous les schémas d'une base de données » 17/10/2018 16:01:20

Encore merci pour votre réponse.
J'ai une version 9.5.6 dans laquelle les méta-commandes \gexec et \g n'existent pas. Si j'exécute la commande, j'ai bien une ligne par schéma qui est généré avec tout ce qu'il faut dedans. Par contre, je ne vois pas bien comment je peux écrire ça. Je pensais à (j'ai 17 schémas) :
DO
FOR i IN 1..17 LOOP
EXECUTE SELECT format('GRANT USAGE ON SCHEMA %I TO sig_bassee', schema_name) FROM information_schema.schemata
END LOOP;
A l'exécution j'ai une erreur de syntaxe sur FOR. Je ne comprends pas bien les instruction DO et EXECUTE (j'ai regardé dans la doc mais ce n'est pas très clair pour moi...).

J'ai une autre question :
Le schéma "monschema" est utilisé par user1, user2, ..., ces utilisateurs faisant partie du groupe "user_read" (on peut imaginer de mettre en place d'autres groupes").
Je voudrais que l'utilisateur créateur d'une table ait tous les droits sur celle-ci et uniquement les droits de lecture sur les tables créées par les autres utilisateurs. J'ai essayé de jouer avec les privilège par défaut. Le problème, c'est que celui qui transmet les droits doit être le propriétaire de la table. Hors, comme celui qui doit transmettre les droits doit être le propriétaire de la table, ça ne peut pas être le groupe (puisque le groupe ne peut pas se connecter). Je pensais déclencher une requête lors de la création de table (grant select on all tables in schema monschema to user_read) mais les triggers ne se déclenche que sur des drop, insert, ... mais pas create.
Auriez-vous une piste à me donner ?

En vous remerciant pour toute votre aide,
Philippe NICOLAS

#7 Re : Sécurité » Droits sur tous les schémas d'une base de données » 12/10/2018 16:33:25

Merci pour votre réponse rapides. J'avais effectivement déjà vu les privilèges par défaut mais dans ce cas précis, je cherche à affecter le même droit à tous les schémas déjà créés. Idem pour les tables. Pour avancer, j'ai mis les droits un à un sur toutes les tables de chaque schéma. ça va bien parce que je n'ai que 14 schémas (+ public) mais qu'en serait-il si j'avais un plus grand nombre de schémas ?
Peut-être faut-il écrire un script qui parcours systématiquement tous les schémas, créer une variable indexée (dans le code sql) et attribuer les droits ?

#8 Sécurité » Droits sur tous les schémas d'une base de données » 12/10/2018 09:42:47

EPTBSGL
Réponses : 14

Bonjour,

1 - Je souhaite affecter le même droit à un groupe sur tous les schémas (par exemple Usage) d'une base de données. Y a-t-il un moyen de faire cela ? J'ai vu que l'on pouvait le faire sur toutes les tables d'un schéma (par exemple avec le droit read) mais je n'ai pas trouvé pour les schémas.
2 - Y a-t-il moyen d'affecter un ou plusieurs droit(s) à toutes les tables de tous les schémas ?

En vous remerciant d'avance pour vos réponse,

Philippe NICOLAS

#9 Re : Sécurité » Connexion via active directory » 26/09/2018 09:35:39

Merci beaucoup. Désolé de vous avoir dérangé pour une erreur aussi idiote !
Tout fonctionne.
Vous pouvez passer en "résolu" le problème.

Philippe NICOLAS

#10 Re : Sécurité » Connexion via active directory » 25/09/2018 16:14:21

Merci pour la rapidité de votre réponse.
Dans le pg_hba.conf, je n'ai laissé que ces 2 lignes (les autres sont commentées)
local   all             all                                     md5
host all all x.y.z.0/24 ldap  1dapserver=x.y.z.t ldapbasedn="OU=UnitéA,OU=UnitéB,DC=DomaineC,DC=DomaineD" ldapbinddn="CN=userldap,OU=UnitéE,OU=UnitéB,DC=DomaineC,DC=DomaineD" ldapbindpasswd=passwduserldap ldapsearchattribute=sAMAccountName
Quand je fais un systemctl restart postgresql-9.5, j'ai le message suivant :
Job for postgresql-9.5.service failed because the control process exited with error code. See "systemctl status postgresql-9.5.service" and "journalctl -xe" for details.

La commande journalctl -xe me donne:
-- L'unité (unit) postgresql-9.5.service a commencé à démarrer.
sept. 25 16:07:32 srvv-bd01-test pg_ctl[5068]: < 2018-09-25 16:07:32.224 CEST >LOG:  redirection des traces vers le processus de récupération des traces
sept. 25 16:07:32 srvv-bd01-test pg_ctl[5068]: < 2018-09-25 16:07:32.224 CEST >ASTUCE :  Les prochaines traces apparaîtront dans le répertoire « pg_log ».
sept. 25 16:07:33 srvv-bd01-test pg_ctl[5068]: pg_ctl : n'a pas pu démarrer le serveur
sept. 25 16:07:33 srvv-bd01-test pg_ctl[5068]: Examinez le journal applicatif.
sept. 25 16:07:33 srvv-bd01-test systemd[1]: postgresql-9.5.service: control process exited, code=exited status=1
sept. 25 16:07:33 srvv-bd01-test systemd[1]: Failed to start PostgreSQL 9.5 database server.
-- Subject: L'unité (unit) postgresql-9.5.service a échoué
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/li … temd-devel
--
-- L'unité (unit) postgresql-9.5.service a échoué, avec le résultat failed.
sept. 25 16:07:33 srvv-bd01-test systemd[1]: Unit postgresql-9.5.service entered failed state.
sept. 25 16:07:33 srvv-bd01-test systemd[1]: postgresql-9.5.service failed.
sept. 25 16:07:33 srvv-bd01-test polkitd[696]: Unregistered Authentication Agent for unix-process:5056:8463599 (system bus name :1.97, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale fr_FR.UTF-8) (disconnected from bus)

En vous remerciant d'avance

#11 Sécurité » Connexion via active directory » 25/09/2018 14:33:17

EPTBSGL
Réponses : 4

Bonjour,

J'essaie de configurer ma base postgresql pour que l'authentification se fasse par active directory. Nous avons un annuaire AD d'adresse IP x.y.z.t.
Dans le fichier pg_hba.conf, j'ai ajouté la ligne suivante :
host all all x.y.z.0/24 ldap  1dapserver=x.y.z.t ldapbasedn="OU=UnitéA,OU=UnitéB,DC=DomaineC,DC=DomaineD" ldapbinddn="CN=userldap,OU=UnitéE,OU=UnitéB,DC=DomaineC,DC=DomaineD" ldapbindpasswd=passwduserldap ldapsearchattribute=sAMAccountName
Si je fais un "reload", je n'ai pas d'erreur mais la connexion ne se fait pas m'indiquant que l'utilisateur avec lequel je me connecte n'est pas présent dans pg_hba.conf
Si je fais un restart de postgresql, j'ai un message d'erreur et le moteur postgresql ne redémarre pas.

La base de donnée postgresql est sur un serveur CentOS 7 d'adresse IP x.y.z.u
L'AD est sur un serveur windows server 2012 d'adresse x.y.z.v
Je me suis assuré d'avoir accès à l'AD à partir du serveur postgresql en utilisant la commande :
ldapsearch -h x.y.z.t -b "OU=UnitéA,OU=UnitéB,DC=DomaineC,DC=DomaineD" -D "OU=UnitéA,OU=UnitéB,DC=DomaineC,DC=DomaineD" -W samaccountname=prenom.nom
Elle me retourne bien l'ensemble des attributs pour ce samaccountname.
J'ai également créé l'utilisateur postgresql "prenom.nom" avec le droit de se connecter à toutes les bases.
Je fais les tests avec pgadmin4 version 3.3 depuis mon poste en Windows 10. Les accès en md5 fonctionnent.
Auriez-vous une idée d'où vient le problème ?

En vous remerciant d'avance pour vos réponses,

Philippe NICOLAS

Pied de page des forums

Propulsé par FluxBB