Benutzer-Werkzeuge

Webseiten-Werkzeuge


postgres
  • 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/<version>/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 <Enter>
  • Danach das neue Passwort setzen

Anschließend die Authentifizierung auf Password ändern:

  • in /etc/postgresql/<version>/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 <Benutzername>
    • 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 <Benuzername> with <Optionen durch Leerzeichen getrennt>;
  • 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\qBeendet die Verbindung mit dem Server/man kommt wieder auf den normalen Kommand-Prompt der Shell zurück
show databases;\lZeigt die vorhandenen Datenbanken an
use <Datenbankname>\c <Datenbankname>Verbindet sich mit der gewünschten Datenbank. Alle Abfragen/SQL-Kommandos beziehen sich ab sofort auf diese Datenbank
show tables;\dAnzeigen 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 <username> -d <database name> -f <output file> -F <forma>

Option Beschreibung
-UBenuztername in dessen Name sich mit der Datenbank verbunden wird und das dump durchgeführt wird)
-dDatenbank die gebackupt werden soll
-fDatei in die die Datenbank geschrieben werden soll
-FOptional das Ausgabeformat (per Default ist es plain → aka ein SQL-Script

Folgende Liste ist nicht vollständig:

Format Beschreibung
pPlain - 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
cCustom - 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 <Datenbankname> -U <Benuztername> <Dumpdateinname>

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 nichtDie 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

postgres.txt · Zuletzt geändert: 2023/12/27 12:34 von root