Update Teams im Praktikum authored by Michael Roth's avatar Michael Roth
# Hinweise zur Arbeitsweise im Praktikum - Teilen von Accounts # Hinweise zur Arbeitsweise im Praktikum - Teilen von Accounts
Diese Seite erklärt eine Best Practice, wie Sie sich in einem Praktikumsteam eine Datenbank teilen können. Dies ist sinnvoll, damit Sie nicht Ihrem Partner Ihr ist* Benutzer Passwort geben müssen. Diese Seite erklärt eine Best Practice, wie Sie sich in einem Praktikumsteam eine Datenbank teilen können. Dies ist sinnvoll, damit Sie nicht Ihrem Partner Ihr ist* Benutzer Passwort geben müssen.
## Ziel: Funktionaler Benutzer und Schema ## Ziel: Funktionaler Benutzer und Schema
Diese Anleitung zeigt Ihnen, wie Sie einen neuen Benutzer (im weiteren Verlauf *funktionaler Benutzer* genannt) erstellen. Sie können sowohl den Benutzernamen als auch das Passwort frei vergeben und diese Informationen dann in Ihren Praktikumsteams verwenden. So müssen Sie eben nicht das Passwort Ihres st* Benutzers preis geben. Diese Anleitung zeigt Ihnen, wie Sie einen neuen Benutzer (im weiteren Verlauf *funktionaler Benutzer* genannt) erstellen. Sie können sowohl den Benutzernamen als auch das Passwort frei vergeben und diese Informationen dann in Ihren Praktikumsteams verwenden. So müssen Sie eben nicht das Passwort Ihres st* Benutzers preis geben.
Sinnvollerweise legen Sie zusätzlich ein *Schema* mit dem selben Namen wie der des funktionalen Benutzers an. Ein Schema ist zu verstehen als eine Art "Unterordner" innerhalb Ihrer Datenbank. Nach Erstellen des funktionalen Benutzers und des Schemas geben Sie dem funktionalen Benutzer die Besitzrechte an dem Schema, so dass dieser alle Operationen (Tabellen erstellen/löschen, Daten hinzufügen/editieren/abfragen) in diesem Schema durchführen darf. Sinnvollerweise legen Sie zusätzlich ein *Schema* mit dem selben Namen wie der des funktionalen Benutzers an. Ein Schema ist zu verstehen als eine Art "Unterordner" innerhalb Ihrer Datenbank. Nach Erstellen des funktionalen Benutzers und des Schemas geben Sie dem funktionalen Benutzer die Besitzrechte an dem Schema, so dass dieser alle Operationen (Tabellen erstellen/löschen, Daten hinzufügen/editieren/abfragen) in diesem Schema durchführen darf.
Weitere Informationen zu Schemas finden Sie in der [Postgres Doku](https://www.postgresql.org/docs/current/ddl-schemas.html) Weitere Informationen zu Schemas finden Sie in der [Postgres Doku](https://www.postgresql.org/docs/current/ddl-schemas.html)
## Erstellen des Benutzers ## Erstellen des Benutzers
Loggen Sie sich mit Ihrem st* Benutzer ein und verwenden Sie den Befehl Loggen Sie sich mit Ihrem st* Benutzer ein und verwenden Sie den Befehl
```sql ```sql
CREATE ROLE foo WITH LOGIN PASSWORD '123'; CREATE ROLE foo WITH LOGIN PASSWORD '123';
``` ```
um einen neuen Benutzer auf dem DBMS zu erzeugen. *foo* ist ein frei wählbarer Name und wird im Folgenden als Beispielname für Ihren funktionalen Benutzer verwendet. um einen neuen Benutzer auf dem DBMS zu erzeugen. *foo* ist ein frei wählbarer Name und wird im Folgenden als Beispielname für Ihren funktionalen Benutzer verwendet.
Benutzer existieren auf dem gesamten DBMS. Es kann also sein, dass Ihr "Wunschname" bereits belegt ist. Benutzer existieren auf dem gesamten DBMS. Es kann also sein, dass Ihr "Wunschname" bereits belegt ist.
**Hinweis:** Verwenden Sie nur Kleinbuchstaben! **Hinweis:** Verwenden Sie nur Kleinbuchstaben!
## Vergeben des Loginrechtes auf Ihre Datenbank ## Vergeben des Loginrechtes auf Ihre Datenbank
Damit der funktionale Benutzer sich auf Ihrer Datenbank einloggen kann, müssen Sie das entsprechende Recht vergeben: Damit der funktionale Benutzer sich auf Ihrer Datenbank einloggen kann, müssen Sie das entsprechende Recht vergeben:
```sql ```sql
GRANT CONNECT ON DATABASE stmamust TO foo; GRANT CONNECT ON DATABASE stmamust TO foo;
``` ```
*stmamust* steht hier stellvertretend für Ihren st* Benutzernamen und foo für den neu angelegten Benutzer. *stmamust* steht hier stellvertretend für Ihren st* Benutzernamen und foo für den neu angelegten Benutzer.
## Erstellen des Schemas ## Erstellen des Schemas
Mit den folgenden beiden Befehlen erstellen Sie ein Schema mit dem Namen *foo* und vergeben das Besitzerrecht an den Benutzer mit dem Namen *foo*. Der erste Befehl ist notwendig, um Ihren st* Benutzer das Recht zu geben, ein Schema im Namen des funktionalen Benutzers zu erzeugen: Mit den folgenden beiden Befehlen erstellen Sie ein Schema mit dem Namen *foo* und vergeben das Besitzerrecht an den Benutzer mit dem Namen *foo*. Der erste Befehl ist notwendig, um Ihren st* Benutzer das Recht zu geben, ein Schema im Namen des funktionalen Benutzers zu erzeugen:
```sql ```sql
GRANT foo TO stmamust; GRANT foo TO stmamust;
CREATE SCHEMA foo AUTHORIZATION foo; CREATE SCHEMA foo AUTHORIZATION foo;
``` ```
Sie sollten den Namen des Schemas identisch zum Namen des funktionalen Benutzers wählen. Hintergrund ist, dass standardmäßig beim Einloggen zuerst das Schema verwendet wird, welches dem Namen des Benutzers entspricht. Existiert ein solches Schema nicht, so wird das *public* Schema verwendet. Die Reihenfolge können Sie auch alternativ nach jedem Login festlegen. Weitere Informationen finden Sie in der [Postgres Doku](https://www.postgresql.org/docs/current/ddl-schemas.html#DDL-SCHEMAS-PATH). Sie sollten den Namen des Schemas identisch zum Namen des funktionalen Benutzers wählen. Hintergrund ist, dass standardmäßig beim Einloggen zuerst das Schema verwendet wird, welches dem Namen des Benutzers entspricht. Existiert ein solches Schema nicht, so wird das *public* Schema verwendet. Die Reihenfolge können Sie auch alternativ nach jedem Login festlegen. Weitere Informationen finden Sie in der [Postgres Doku](https://www.postgresql.org/docs/current/ddl-schemas.html#DDL-SCHEMAS-PATH).
Deutlich komfortabler als das ständige Angeben des Suchpfades ist allerdings das oben genannte Vorgehen, das Schema einfach identisch zu benennen. Deutlich komfortabler als das ständige Angeben des Suchpfades ist allerdings das oben genannte Vorgehen, das Schema einfach identisch zu benennen.
### Variante: **Kein** neues Schema erstellen, sondern bestehendes Schema verwenden ### Variante: **Kein** neues Schema erstellen, sondern bestehendes Schema verwenden
Sie können auch ein bestehendes Schema verwenden anstatt ein neues anzulegen. Dann allerdings müssen Sie den Suchpfad anpassen oder aber Ihre Tabellen mit dem voll qualifizierten Namen *Schema.Tabelle* adressieren. Daher ist diese Variante nicht empfohlen! Sie können auch ein bestehendes Schema verwenden anstatt ein neues anzulegen. Dann allerdings müssen Sie den Suchpfad anpassen oder aber Ihre Tabellen mit dem voll qualifizierten Namen *Schema.Tabelle* adressieren. Daher ist diese Variante nicht empfohlen!
Zunächst wird dem funktionalen Benutzer das Recht gegeben, auf das Schema zuzugreifen: Zunächst wird dem funktionalen Benutzer das Recht gegeben, auf das Schema zuzugreifen:
```sql ```sql
GRANT USAGE ON SCHEMA stmamust TO foo; GRANT USAGE ON SCHEMA stmamust TO foo;
``` ```
Berechtigungen auf alle Tabellen in einem Schema vergeben Sie wie folgt: Berechtigungen auf alle Tabellen in einem Schema vergeben Sie wie folgt:
```sql ```sql
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA stmamust TO foo; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA stmamust TO foo;
``` ```
**Hinweis:** Diesen Schritt müssen Sie unter Umständen wiederholen, wenn Tabellen durch einen anderen Benutzer, bspw. Ihren st* Benutzer, neu erzeugt wurden! **Hinweis:** Diesen Schritt müssen Sie unter Umständen wiederholen, wenn Tabellen durch einen anderen Benutzer, bspw. Ihren st* Benutzer, neu erzeugt wurden!
## Login mit dem funktionalen Benutzer ## Login mit dem funktionalen Benutzer
Loggen Sie sich mit dem st* Benutzer aus und erstellen Sie in PgAdmin eine neue Verbindung. Den Datenbanknamen lassen Sie auf *stmamust*. Ändern Sie allerdings den Benutzer auf *foo* und das Passwort auf das von Ihnen gewählte. Loggen Sie sich mit dem st* Benutzer aus und erstellen Sie in PgAdmin eine neue Verbindung. Den Datenbanknamen lassen Sie auf *stmamust*. Ändern Sie allerdings den Benutzer auf *foo* und das Passwort auf das von Ihnen gewählte.
Wenn Sie `psql` verwenden, können Sie Benutzer und Datenbank als Parameter angeben: Wenn Sie `psql` verwenden, können Sie Benutzer und Datenbank als Parameter angeben:
``` ```
psql -h postgres.fbi.h-da.de -U foo -d stmamust psql -h postgres-ubuntu.fgdb.users.h-da.cloud -U foo -d stmamust
``` ```
## Alternative mit ROLE als gemeinsame Gruppe ## Alternative mit ROLE als gemeinsame Gruppe
Eine weitere Alternative ist hier beschrieben: https://serverfault.com/questions/453777/granting-rights-on-postgresql-database-to-another-user Eine weitere Alternative ist hier beschrieben: https://serverfault.com/questions/453777/granting-rights-on-postgresql-database-to-another-user
\ No newline at end of file