Verwenden von SCHEMAs

Hallo, liebe Postmaster,

Ich möchte zur “Isolation” der Benutzer, diesen nur Zugriff in einem Schema gewähren. Allerdings soll darin natürlich auch die Datenbank liegen, mit der sie arbeiten sollen. Nun kann ich zwar die Datenbank (aus einem entsprechenden Template) anlegen, allerdings wird die Datenbank immer im Schema ‘public’ angelegt. Wie kann ich erreichen eine Datenbank (bzw. die darin befindlichen Tabellen) in dem speziellen Schema (aus dem template) anlegen zu lassen.

Vielen Dank für Eure Hilfe
Rolf

Hallo Rolf,

ein neues SCHEMA in einer Datenbank, z.B. postgres, kannst Du mit CREATE SCHEMA anlegen. Die Rechte für User werden mittels CREATE USER … und GRANT … definiert. Details muss Du in der Doku nachlesen.



mfg

fristo

Hallo Fristo,

Vielen Dank für Deine Antwort, aber ein Schema anlegen und Rechteverwaltung war nicht das grundlegende Thema, sondern "wie kann ich eine DATENBANK (aus einem Template) anlegen lassen, so das diese sofort Teil eines anderen Schema sind.

Gruss
Rolf

Du könntest dich mit dem search_path Einstellungen (siehe SET Optionen) beschäftigen. Damit legst du fest, welche Schemas der User von Haus aus sieht, wenn er kein Schema angibt.

Zugriffsbeschränkungen auf Schemata legst du normal mit GRANT/REVOKE an.

Allerdings fürchte ich nach dem Durchlesen deines Postings, das dies nicht ganz das ist, was du möchtest. Genauer konnte ich dein Problem leider auch nicht verstehen, vielleicht erläuterst du das einmal an einem Beispiel?

Hallo Rolf,

zum Verständnis: PostgreSQL kann 1…n DATENBANKEN erzeugen. Eine Datenbank kann 1…n SCHEMA enthalten.

CREATE DATABASE funktioniert eigentlich, indem es eine bestehende Datenbank kopiert. Wenn nichts anderes angegeben wurde, kopiert es die Systemdatenbank template1. Wenn in template1 ein SCHEMA PUBLIC enthalten, wird diese kopiert. Was hindert dich, in template1 das SCHEMA PUBLIC mittels ALTER SCHEMA einen neuen Namen zu geben oder ein zusätztliches SCHEMA in template1 anzulegen oder ein eigene Datenbank “template???” mit Deinen eigenen SCHEMEN anzulegen und diese als Vorlage zu verwenden?


mfg

fristo

Hallo Fisto,

ich glaube der Tipp mit ALTER SCHEMA ist der entscheidende.

Danke.
Rolf

Hallo,

also mit ALTER SCHEMA wurde mein Problem weitgehend gelöst.

Etwas unklar ist mir noch, warum ich den Owner von Tabellen noch ändern muss, wenn die Datenbank per Template für einen bestimmten USER angelegt wird. Hätte erwartet, dass die Tabellen dem selben User gehören, wie die Datenbank.
– Muss den Owner in einem zusätzlichen Lauf mit alter table … owner to … umsetzen

Weiß jemand eine Erklärung
Danke
Rolf

Hallo Rolf,

Eigentümer (Owner) einer Datenbank, Tabelle, Funktion, … ist erst mal grundsätzlich derjenige, der sie definiert.

Wie oben beschrieben, kannst Du mit mittels CREATE USER … und GRANT … die Rechte für User/Gruppen an einer Datenbank, Tabelle, Funktion, … definieren.



mfg

fristo

Hallo,

ich habe auch eine Frage zu “SCHEMA”. Ich denke es passt hier einigermaßen rein.

Ich habe ein SCHEMA folgendermaßen angelegt:

CREATE SCHEMA topo_geo;

Dann habe ich eine Tabelle in diesem SCHEMA angelegt.

CREATE TABLE topo_geo.test (test varchar(10))

Das hat alles funktioniert. Ich kann auch einen SELECT auf die Tabelle machen. Aber wieso bekomme ich die Tabelle nicht mit “\d” angezeigt? Ich bekomme auf diese Weise nur alle Tabellen, Sequenzen, etc. die in PUBLIC stehen.

Wie kann ich mir alles anzeigen lassen?

Du musst dein Schema in den ‘search_path’ mit aufnehmen, damit \d dieses Schema mit in Betracht zieht. Setzen tust du den Parameter mit SET, siehe auch die Dokumentation für diesen Befehl.

OK, danke.