GRANT auf DB postgres

Hier geht es um die Verwaltung von Benutzern und Rechten.
CaptnUnterhose
Neuer Benutzer
Beiträge: 19
Registriert: Mi 2. Mai 2012, 14:19
Wohnort: Stralsund

GRANT auf DB postgres

Beitrag von CaptnUnterhose » Fr 6. Jul 2012, 17:02

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
Geht nicht, gibts nicht. Aber gibts nicht geht.

CaptnUnterhose
Neuer Benutzer
Beiträge: 19
Registriert: Mi 2. Mai 2012, 14:19
Wohnort: Stralsund

Beitrag von CaptnUnterhose » Fr 6. Jul 2012, 17:03

Ach ja, mir ist gerade aufgefallen das der Titel eigentlich gar nicht so passt. Aber gut.
Geht nicht, gibts nicht. Aber gibts nicht geht.

akretschmer
Erfahrener Benutzer
Beiträge: 7410
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Beitrag von akretschmer » Fr 6. Jul 2012, 17:13

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
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitrag von ads » So 8. Jul 2012, 11:48

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.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support

CaptnUnterhose
Neuer Benutzer
Beiträge: 19
Registriert: Mi 2. Mai 2012, 14:19
Wohnort: Stralsund

Beitrag von CaptnUnterhose » Mo 9. Jul 2012, 11:29

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
Geht nicht, gibts nicht. Aber gibts nicht geht.

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitrag von ads » Mo 9. Jul 2012, 11:34

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.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support

CaptnUnterhose
Neuer Benutzer
Beiträge: 19
Registriert: Mi 2. Mai 2012, 14:19
Wohnort: Stralsund

Beitrag von CaptnUnterhose » Mo 9. Jul 2012, 12:04

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
Geht nicht, gibts nicht. Aber gibts nicht geht.

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitrag von ads » Mo 9. Jul 2012, 12:13

Du solltest dir wirklich die pg_hba.conf Dokumentation anschauen ...
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support

CaptnUnterhose
Neuer Benutzer
Beiträge: 19
Registriert: Mi 2. Mai 2012, 14:19
Wohnort: Stralsund

Beitrag von CaptnUnterhose » Mo 9. Jul 2012, 12:49

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
Geht nicht, gibts nicht. Aber gibts nicht geht.

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitrag von ads » Mo 9. Jul 2012, 13:04

"aufzublähen"? Nun ja, kein Kommentar.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support

Antworten