phppgadmin und Rechte

Patrick Willam p.willam at gmx.de
Wed Sep 3 21:44:55 CEST 2003


Joern Muehlencord schrieb:
 > Hallo zusammen, meine Googlei hat mal wieder versagt. Ich habe
 > phpphadmin eingerichtet, habe mit dem User Postgres eine Datenbank
 > angelegt, und habe einer Gruppe die entsprechenden Rechte gegeben.
 > Wenn ich jetzt mit psql und einem User dieser Gruppe arbeite, dann
 > kann ich die Datenbank inkl aller Tabellen nutzen. Wenn ich mich mit
 > phppgadmin anmelden, dann sehe ich keine Tabellen. Ist das eine
 > Einstellung von phppgadmin oder von postgres? Und vorallem welche?
 > Gruss Jörn

Hallo Jörn!

Version von phpPgAdmin und PostgreSQL und Name der Distribution wären
schön gewesen [ebenso Namen der User, Gruppe und Tabellen incl.
vergebener Rechte]
...muss aber nicht [;-)] -- fangen wir also erstmal mit den Basics an:

Bei den vergebenen Rechten hoffe ich mal, die beziehen sich auf die
Rechte _innerhalb_ des RDBMS. Da es mittels psql klappt, vermute ich,
dass dem so ist.

Als nächstes wäre die Authentifizierung gegenüber PostgreSQL
einzustellen: wer darf von wo mit welcher Auth-Methode auf welche DBs
zugreifen.

Dazu mal in die Datei pg_hba.conf schauen! [zu finden in $PGDATA/ bzw.
~postgres/data/ bzw. in /etc/postgresql/ (zumindest bei mir)]
Im 'unteren' Bereich müssten sich in etwa folgende Zeilen finden:
----------< schnipp >----------
# This default configuration allows any local user to connect as himself
# without a password, either through a Unix socket or through TCP/IP;
# users on other machines are denied access.
local    all                              ident sameuser
host     all    127.0.0.1    255.0.0.0    ident sameuser
----------< schnapp >----------

"local" ist für die Authentifizierung über lokale Unix-Sockets,
"host" für TCP/IP-Verbindungen.

"ident" überläßt den Auth-Vorgang dem Betriebssystem (login, su, ...);
hier ist das System-Login-Passwort erforderlich! (User _muss_ lokal
[d.h. beim System auf dem der postmaster läuft] existieren)
"sameuser" erlaubt Usern nur den Zugriff auf DBs mit gleichem Namen
(DB-Name == User-Name).

Also 1.: "sameuser" lassen oder löschen; je nach Bedarf.
Und 2.: ggf. die Auth-Methode anpassen.
Alternativen zu "ident" sind z.Bsp.:
"password" -- Passwort erforderlich, welches IN postgres vergeben ist
   (User _muss_nicht_ lokal [s.o.] existieren)
"md5"/"crypt" -- s.o., aber Passwort geht NICHT im Klartext übers Netz
"trust"/"reject" -- es wird OHNE Prüfung vertraut bzw. abgewiesen

phpPgAdmin arbeitet wahlweise über lokale Unix-Sockets oder über TCP/IP
auf localhost. Je nachdem musst du auch in $PGDATA/postgesql.conf
Anpassungen vornehmen. Siehe dazu config.inc.php [bei mir in
/etc/phppgadmin/] die Zeile
"/***************** IMPORTANT SECURITY NOTICE *****************"
_und_folgende_!

Ebendort *und* in pg_hba.conf findet sich auch der entscheidende
Hinweis, dass der postmaster mit der dementsprechenden Option gestartet
werden muss, damits auch mit'm TCP/IP klappt.

Also config.inc.php lesen, verstehen und entsprechend anpassen.
Bei Bedarf hilft einem /usr/doc/phppgadmin/Documentation.html weiter!
Dann pg_hba.conf und ggf. postgresql.conf entsprechend anpassen.
Genaueres in der wirklich hervorragenden Doku zu PostgreSQL:
"PostgreSQL 7.x.y Administrator's Guide" --> Kapitel 4 "Client
Authentication" --> 4.1. "The pg_hba.conf file"

Der Vollständigkeit halber / wo ich gerade dabei bin:
nach Änderungen an den postgres Konfigurations-Dateien
diese neu einlesen lassen; entweder mit "kill -HUP <postmaster_pid>"
oder "pg_ctl reload" oder ihn neustarten.
| PostgreSQL Administrator Guide / "3.4. Run-time configuration":
| The configuration file is reread whenever the postmaster receives a
| SIGHUP signal (which is most easily sent by means of pg_ctl reload).
| The postmaster also propagates this signal to all already-running
| backend processes, so that existing sessions also get the new default.

Anbei noch die relevanten Ausschnitte aus meiner Konfiguration...

/etc/postgresql/postgresql.conf:
| tcpip_socket = 1

/etc/postgresql/pg_hba.conf:
| local     all                                     password
| host      all      127.0.0.1     255.0.0.0        password

/etc/phppgadmin/config.inc.php:
| $cfgServers[1]['local']         = true;
| $cfgServers[1]['host']          = 'localhost';
| $cfgServers[1]['port']          = '5432';
| $cfgServers[1]['adv_auth']      = true;
| $cfgServers[1]['user']          = '';
| $cfgServers[1]['password']      = '';
| $cfgServers[1]['only_db']       = '';

===== Noch ein Hinweis zu "local all password" in pg_hba.conf =====
Damit braucht auch der PostgreSQL-Superuser (i.d.R. "postgres") ein
Passwort *in* der Datenbank, sonst bekommt auch er keinen Zugriff!
Ich hatte mich auf diese Weise nämlich erstmal selber ausgesperrt ;-)

Das Zusammenschreiben des ganzen Krams hat über ne Stunde gedauert, und
ist mit der Hoffnung verbunden, dass Du die Geschichte erstmal fix an
den Start kriegst, ohne erst an allen Ecken und Enden herumsuchen und
ausprobieren zu müssen.

Das RTFM der genannten Dateien & Doku wird Dir aber letzlich *nicht*
erspart bleiben! Zumindest weisst du jetzt, was und wo Du zuerst lesen
musst. Sollten dabei oder danach noch Verständisfragen aufkommen, werde
ich mich gerne nochmal in den Ring werfen. Nichts-desto-trotz: RTFM

...ach, und bevor ich's vergesse: das nächste mal bringst du die
Glaskugel [s.o.] selber mit ;-)

Mit besten Grüssen,
Patrick

PS: ich hoffe die Zeilenlänge stimmt; irgendwie will mein Mozilla noch 
nicht so ganz wie ich will.

-- 
Zur Meldung "Laut ... Spiegel-Online planen Japan, China und Suedkorea
die Entwicklung eines Ersatzbetriebssystems fuer Windows.": Soviel
Urlaub kann Ballmer gar nicht mehr unterbrechen, wie jetzt noetig waere.
     -- http://www.pro-linux.de/news/2003/5912.html




More information about the Linux mailing list