eine Schulungsumgebung wollte ich wie folgt aufbauen:
CREATE DATABASE veranstaltungsname
CREATE USER student1...
CREATE SCHEMA student1 AUTHORIZATION student1
CREATE USER student2...
CREATE SCHEMA student2 AUTHORIZATION student2
So kann student1 zwar nicht die Daten von student2 einsehen, aber immer noch die DDL der Datenbankobjekte von student2. Genau die DDL ist aber Teil der Übungen, die die Studenten unabhängig voneinander lösen sollen.
Kann ich die DDL der Objekte in anderen Schemata der gleichen Datenbank verstecken?
Oder muss ich je eine Datenbank pro Student anlegen, um hier eine harte Trennung durch zu setzen? Das würde mein Ziel zwar erreichen, wäre aber in der Bedienung und Administration deutlich unkomfortabler.
funktioniert es leider nicht, und da all meine Recherchen keine Möglichkeit ergaben, bin ich geneigt, ads Recht zu geben. Verbleibt mir die (unkomfortable) Option separater Datenbanken.
“Komplizierter” würde ich es auch nicht nennen, nur eben unkomfortabler, aufwändiger.
Die Studenten sollen unter anderem Views bzgl. gemeinsam genutzer Daten speichern. Mit einem Schema pro Student und thematisch sortierten Schemata für die gemeinsamen Daten wären Abfragen wie
CREATE VIEW student1.v1 AS
SELECT * FROM gemeinsames_schema1.tabelle1
ja auch kein Problem. Wenn die Studenten allerdings eigene Datenbanken bekommen sollen, kann ich die gemeinsam genutzten Daten nicht analog in eine eigene Datenbank mit ihren thematischen Schemata auslagern. Denn PostgreSQL unterstützt in der eingesetzten Version 8.x keine Cross-Datenbank-Abfragen (und für die 9.0.1 habe ich noch nichts Gegenteiliges gefunden):
CREATE VIEW student1.public.v1 AS
SELECT * FROM gemeinsame_datenbank.gemeinsames_schema1.tabelle1
Deshalb habe ich (unkomfortabler- und aufwändigerweise) vor, die gemeinsam genutzten Daten in die jeweiligen Studenten-Datenbanken in entsprechende Schemata zu kopieren. Immerhin scheinen die gemeinsam genutzten Daten über den Verlauf der Lehrveranstaltung hinweg unverändert zu bleiben.