Seite 1 von 2

GRANT auf DB postgres

Verfasst: Fr 6. Jul 2012, 17:02
von CaptnUnterhose
Hallo werte Freude der gepflegten Datenbank,

mich beschäftigt gerade folgendes Thema. Ich durchsteige gerade das Rechtekonzept und mir ist aufgefallen, dass der Ottonormalnutzer, sobald er erzeugt wurde, folgende Privilegien besitzt. Er darf einfach mal in der postgres-DB User-Tabellen erzeugen. Nun habe ich jedoch die Doku zu rate gezogen und da steht, dass die Default-acl so gestrickt wurde, dass das eigentlich nicht gehen soll. Daher bin ich auf die glorreiche Idee gekommen, dass ich folgendes sage:

Code: Alles auswählen

REVOKE CREATE ON SCHEMA public from public; -- für die DB postgres


Und jetzt meine Frage. Laufe ich ins Chaos oder betrifft es einzig die Erzeugung von User-Tabellen in postgres??

Gruß und Danke schon mal

CaptnUnterhose

Verfasst: Fr 6. Jul 2012, 17:03
von CaptnUnterhose
Ach ja, mir ist gerade aufgefallen das der Titel eigentlich gar nicht so passt. Aber gut.

Verfasst: Fr 6. Jul 2012, 17:13
von akretschmer
CaptnUnterhose hat geschrieben:Hallo werte Freude der gepflegten Datenbank,

mich beschäftigt gerade folgendes Thema. Ich durchsteige gerade das Rechtekonzept und mir ist aufgefallen, dass der Ottonormalnutzer, sobald er erzeugt wurde, folgende Privilegien besitzt. Er darf einfach mal in der postgres-DB User-Tabellen erzeugen. Nun habe ich jedoch die Doku zu rate gezogen und da steht, dass die Default-acl so gestrickt wurde, dass das eigentlich nicht gehen soll. Daher bin ich auf die glorreiche Idee gekommen, dass ich folgendes sage:

Code: Alles auswählen

REVOKE CREATE ON SCHEMA public from public; -- für die DB postgres


Und jetzt meine Frage. Laufe ich ins Chaos oder betrifft es einzig die Erzeugung von User-Tabellen in postgres??

Gruß und Danke schon mal

CaptnUnterhose



PostgreSQL ist (leider) nicht wirklich z.B. für Shared Hosting zugeschnitten. Das man es dennoch so verwenden kann, und wie, hat mein Kollege vor Jahren mal hier dokumentiert:

Shared Database Hosting - PostgreSQL wiki


Les das mal durch, sollte Dein Problem/Frage mit beantworten.


Andreas

Verfasst: So 8. Jul 2012, 11:48
von ads
Außerdem solltest du von vorne herein verhindern das sich der normale Benutzer an dieser Datenbank anmelden darf.
Das wird in "pg_hba.conf" geregelt.

Verfasst: Mo 9. Jul 2012, 11:29
von CaptnUnterhose
Hallo miteinander,

@ads: ein sehr guter Einwurf. Den hatte ich bereits verdrängt.

@akretschmer: Die Frage wurde mir eigentlich damit beantwortet. Quasi verstehe ich das so, dass ich die Schritte (die Revoke's) aus dem geposteten Link für template1 und postgres machen sollte. Stellt sich für mich noch die Frage, ob man das nicht auch für template0 machen könnte? Quasi um die ganze Riege der Datenbanken von vorne herein nen bisschen sicherer zu machen. Nebenbei wüsste ich gern, warum als Default "public" immer auch in neue Dbs schreiben kann (zumindest bei mir). Muss ich dazu die Default-ACLs anpassen?

Gruß und herzlichen Dank für eine Antwort.

Michael

Verfasst: Mo 9. Jul 2012, 11:34
von ads
Jeder Benutzer darf genau das, was in "template1" an Rechten festgelegt ist.
Wenn du das in "template1" anpasst, bekommt jede neue Datenbank diese Rechte als Kopie.

An template0 darf sich sowieso niemand anmelden.

Verfasst: Mo 9. Jul 2012, 12:04
von CaptnUnterhose
Mahlzeit,

besten Dank für die Antwort. Ich war mal so frei und habe folgendes gemacht.

  1. mit template1 verknüpfen
  2. revoke all on database template1 from public;
  3. revoke all on schema public from public;
  4. grant all on schema public to postgres;

Dann habe ich einfach eine neue Datenbank erzeugt mit Namen <test> und nem Eigentümer mit Namen <hugo>.
Sofern ich mich jetzt mit einem alternativen Nutzer mit z.B. Namen <hektor> anmelde komme ich auf die DB <test> rauf, kann aber nichts erstellen. Ds ist schon mal sehr gut. Mich stört jetzt jedoch noch, dass der Nutzer sich überhaupt verbinden darf.

Dieses Problem hab ich gelöst indem ich in der DB <test> halt nochmal ein 'REVOKE ALL ON DATABASE test FROM public' losgelassen habe.

Und nun meine Frage. Ich dachte, dass der Punkt 2 den DB-Zugriff von vorne herein totlegt und man nicht abermals nochmal ran muss.

Oder bin ich auf einem ganz falschen Weg und hab das ganze nicht verstanden? Kann ja auch gut möglich sein.

Gruß und besten Dank schon mal für eine mögliche Antwort.

Michael

Verfasst: Mo 9. Jul 2012, 12:13
von ads
Du solltest dir wirklich die pg_hba.conf Dokumentation anschauen ...

Verfasst: Mo 9. Jul 2012, 12:49
von CaptnUnterhose
Mahlzeit abermals,

Datei wurde mehrfach gelesen. Mich interessiert halt nur dieses Verhalten, da mir in einer PSQL-Schulung freude strahlend mitgeteilt wurde, dass man doch lieber die Berechtigung per REVOKE/GRANT setzen soll, statt die pg_hba-Datei aufzublähen. Und wenn ich die Doku richtig lese, wird halt auch explizit darauf hingewiesen.

Gruß
Michael

Verfasst: Mo 9. Jul 2012, 13:04
von ads
"aufzublähen"? Nun ja, kein Kommentar.