* DBMS (Datenbank Management System) ====== HowTo ======= ===== Root-Passwort (bzw. postgres) setzen ===== * Die Anweisungen beziehen sich auf ein Debian-System, sind aber vermutlich in den meisten anderen Distributionen ähnlich * in /etc/postgresql//main/pg_hba.conf stehen die Login-Methoden * es sollte eine Zeile wie folgt geben die nicht auskommentiert sein sollte local all postgres peer * Die Zeile definiert das der Benutzer postgres Zugriff auf alle Datenbanken hat, wenn er lokal am System (also als Unix-Login) angemeldet ist, ohne sich gegenüber der Datenbank noch mal authentifizieren zu müssen * su postgres -> Login auf der Shell als Benutzer postgres * psql -> Anmelden an der Datenbank und wechseln in die Datenbankshell * \password * Danach das neue Passwort setzen Anschließend die Authentifizierung auf Password ändern: * in /etc/postgresql//main/pg_hba.conf local all postgres peer durch: local all postgres md5 Ersetzen/eventuell ersteres auskommentieren und zweiteres einfügen. * Die Liste durchgehen und schauen ob noch irgendwo peer steht und ggf. auch durch md5 ersetzen ===== Login ===== * psql -U * postgres entspricht per Default dem Benutzer "root" in MySQL ===== Benutzer anlegen ===== * in aktuellen Versionen 9.x aufwärts gibt es keinen Unterschied zwischen Benuztern und Gruppen * beides wird als Rollen bezeichnet * Gruppen sind Rollen die Benutzern zugewiesen wurden * Benuzter sind Rollen * Benutzer können über createuser auf der normalen Shell angelegt werden (ist ein Program) * oder über die Datenbankshell ==== Per Datenbankshell ==== * Syntax: create role with ; * Beispiel: create role test with nosuperuser nocreatedb nocreaterole password 'secret'; Je nach Konfiguration werden dem Benutzer bestimmte Optionen automatisch eingeräumt und müssen ihm ggf. explizit beim Anlegen genommen werden -> das sind die Optionen die "no" im Namen haben. \\ Es gibt auch deren positives Gegenstück - jeweils ohne "no" davor. \\ \\ Auf die Option: "password" folgt in '' das Klartextpasswort. Man kann hier auch das MD5-Passwort angeben. ====== Unteschiede in den Kommandos zu MySQL/Basisbefehle ====== Einige Sachen die in MySQL durch SQL-Kommandos gemacht werden können gibt es in Postres nicht, sie werden durch Postgres-Befehle abgebildet. \\ Postgres-Befehle werden durch "\" vor dem Befehl markiert. \\ \\ Eine Übersicht gibt es durch Eingabe von \h ^MySQL-Syntax ^Postgres-Syntax ^Erklärung ^ |exit|\q|Beendet die Verbindung mit dem Server/man kommt wieder auf den normalen Kommand-Prompt der Shell zurück| |show databases;|\l|Zeigt die vorhandenen Datenbanken an| |use |\c |Verbindet sich mit der gewünschten Datenbank. Alle Abfragen/SQL-Kommandos beziehen sich ab sofort auf diese Datenbank| |show tables;|\d|Anzeigen der vorhandenen Tabellen in der Datenbank| ====== pg_dump und pg_restore ====== * pg_dump kann genutzt werden um Dumps von einzelnen Datenbanken zu machen * es kennt mehrere Formate für das Dump * es gibt ein Format was normales SQL erzeugt * es gibt 2 Formate die eine Binärdatei erzeugen * die haben den Vorteil das man auch ggf. nur Teilaspekte wiederherstellen kann * zumindest die Binärformate stellen auch die Berechtigungen wieder her Syntax: pg_dump -U -d -f -F ^Option ^Beschreibung ^ |-U|Benuztername in dessen Name sich mit der Datenbank verbunden wird und das dump durchgeführt wird)| |-d|Datenbank die gebackupt werden soll| |-f|Datei in die die Datenbank geschrieben werden soll| |-F|Optional das Ausgabeformat (per Default ist es plain -> aka ein SQL-Script \\ \\ Folgende Liste ist nicht vollständig: ^Format ^Beschreibung ^ |p|Plain - ein SQL-Script - ich bin mir nicht sicher ob hier die Berechtigungen wiederhergestellt werden. \\ Das Format kann über psql wieder eingelesen werden (nicht aber über pg_restore. \\ \\ Hat den Vorteil das man per Hand darin herumeditieren kann. Der Nachteil ist das es von Oebn nach Unten so ausgeführt wird -> eine selektive Wiederherrstellung ist nur durch editieren der Datei möglich| |c|Custom - komprimiertes Binärformat. \\ \\ Kann nicht editiert werden \\ Selektives wiederherstellen möglich \\ Wiederherstellen über pg_restore möglich| | * pg_restore stellt eine Datenbank aus einer Datei im "c"-Format oder "d"-Format (beides binäres Format von pg_dump wieder her * als "p"-Forma gespeicherte Dateien (SQL-Scripte) müssen direkt über psql wiederhergestellt werden **Achtung:** Die Datenbank und die Benuzter deren Berechtigungen im Dump gespeichert sind müssen zuvor per Hand angelegt werden -> sie sind NICHT Teil des dumps. Syntax: pg_restore -d -U ====== pg_dumpall ====== * Dumped alle Datenbanken des Clusters (des Datebankservers), inkl. Berechtigungen und Benutzer * **Hinweis:** die Config-Dateien des Clusters werden natürlich nicht migesichert * dort sind aber u.a. die Algorithmen für die Passwörter definiert pg_dumpall > somefile.sql Restore: psql -f somefile.sql postgres Welche Datenbank (welche da angegeben wird) (in diesem Fall postgres) angegeben wird (hier postgres) ist an sich egal, der Befehl erwartet nur eine Angabe. ====== Generelle Hinweise ====== * Kommt auf einen Befehl keine Bestätigung ist etwas schief gelaufen * (alle?) Befehle geben eine Rückgabe ====== Troubleshooting ====== ^Problem ^Lösung ^ |Nach pg_dumpall und wiederherstellung auf einem anderen System funktioniert der Login nicht|Die Authentifizierungsmechanisnmen (und die verwendeten Verschlüsselungen für die Passwörter) sind in pg_hba.conf hinterlegt. \\ Wird diese nicht mitkopiert (was pg_dumpall nicht tut). \\ Datei muss mitkopiert werden oder die Authentifizierungsemchanismen im Nachgang angepasst werden. **Zu beachten:** Ein Mechanismus kann nur eine Verschlüsselungsmethode haben und wenn die Verschlüsselungsmethode mit der übereinstimmt mit der die Passwörter in der Datenbank verschlüsselt sind schlägt das anmelden fehl -> man kann also die Passwörter in der "alten" Datenbank nicht als MD5 haben und in der neuen pg_hba.conf SHA256 stehen haben| |Gleiche Authentifizierungsmethode mit verschiedenen Verschlüsselungsalgorithmen in pg_hba.conf| host all all 127.0.0.1/32 scram-sha-256 host all all 127.0.0.1/32 md5 In obigem Beispiel soll Host-Authentifizierung mit scram-sha-256 verschlüsselten und md5-Passwörtern erlaubt werden. \\ Das geht nicht, pro Authentifizierungsmethode kann es nur einen Passwortverschlüsselungsalgorithmus geben, ggf. müssen also die Passwörter in der Datenbank erneut mit einer der beiden Methoden verschlüsselt werden|