Benutzer-Werkzeuge

Webseiten-Werkzeuge


postgres

Dies ist eine alte Version des Dokuments!


  • 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.1703676827.txt.gz · Zuletzt geändert: 2023/12/27 12:33 von root