Hallo Mitstreiter,
bitte nicht gleich denken: och nöööö, schon wieder pg_hba.conf.
Nein, hier soll es um ein sehr interessantes Phänomen gehen.
Folgende Situation:
- Debian: postgresql-9.0.7-1~bpo60+1
- eine Datenbank (oh Wunder) mit mehreren Nutzern
- die Nutzer wurden in Gruppen einsortiert
- die Gruppen wurden in der pg_hba.conf angegeben und greifen auf unterschiedliche BASE-DN zu
Folgender Code wird verwendet (etwas anonymisiert):
...
# DB-Admins
host all +gr_test_admin 172.20.70.0/24 ldap ldapserver=<URL> ldapbasedn="ou=dbadmins,dc=<uninteressant>,dc=de" ldapbinddn="cn=db,ou=binddn,dc=<uninteressant>,dc=de" ldapbindpasswd="<PW>" ldapsearchattribute="uid"
# God-Mode
host all +gr_administrator 172.20.70.0/24 ldap ldapserver=<URL> ldapbasedn="ou=staff,ou=person,dc=<uninteressant>,dc=de" ldapbinddn="cn=db,ou=binddn,dc=<uninteressant>,dc=de" ldapbindpasswd="<PW>" ldapsearchattribute="uid"
...
Der LDAP-Bind funzt wunderbar. Das schon mal vorweg.
Sooo, und nun zum Problem: Ich versuch mich mit nem Nutzer aus der Gruppe gr_administrator aus dem genannten IP-Bereich an der DB anzumelden. Leider klappt das nicht, weil der erste Eintrag von beiden genommen wird und der Nutzer nicht unterhalb der Base-DN zu finden ist.
JETZT die Frage: Warum ist das soo? ich dachte eigentlich, dass die ersten vier Spalten die Verbindung eindeutig “referenzieren”. Sprich, die ersten vier Einträge müssen eindeutig zusammenpassen, bevor eine Aktion, in dem Fall Authentifizierung, ausgeführt wird. Bei mir hingegen wird einfach die IP-Adresse genommen, geschaut wo das erste Auftreten ist, und die Aktion ausgeführt. Und das ist Schrott.
Meine Erkenntnis über das vormals geglaubte korrekte Verhalten dazu habe ich aus dem Buch “PostgreSQL Administration” (2. Auflage, S. 193, vorletzter Absatz).
Bitte gebt mir einen Hinweis. Weil wenn die IP-Adresse scheinbar das einzige Kriterium ist, werd ich die Datei ausdünnen (müssen).
Gruß und herzlichsten Dank
CaptnUnterhose