Content
Dateianzeige für postgresql16 (3.4.2)
usr/share/doc/postgresql16/postgresql16.txt
Dokumentation des Pakets PostgreSQL 16
Inhalt
------
1 Allgemein
2 Installation
3 Konfiguration
3.1 Allgemeine Einstellungen
3.2 Zugriffstabelle
3.3 Leistung und Resourcen-Verteilung
3.4 Protokoll-Einstellungen
3.5 Sicherung
4 Das Paketmenue
4.1 PostgreSQL administration
4.2 PostgreSQL tools
4.3 PostgreSQL backup and restore
5 PostgreSQL und Sicherheit
6 Methoden der Benutzerauthentifizierung
6.1 Ident Authentifizierung
6.2 PAM Authentifizierung
7 Sicherung und Wiederherstellung
8 PostgreSQL Administrator
9 PostgreSQL Module
1 Allgemein
-----------
PostgreSQL ist ein sehr leistungsfaehiges relationales Datenbanksystem
das in seiner Funktionsvielfalt kaum Wuensche offen laesst. Dazu gehoert
eine vollstaendige Unterstuetzung von Foreign Keys, Joins, Views, Triggers
und Stored Procedures. Es stehen die meisten Datentypen der Standards
SQL92 und SQL99 zur Verfuegung sowie auch die Speicherung von Daten in
Binary Large Objects (BLOBS).
Zur Anbindung von Client-Applikationen sind Programmierschnittstellen
fuer eine Vielzahl von Programmiersprachen vorhanden. Darunter C/C++, Java,
Perl, Python, Ruby, Tcl und ODBC. Zudem steht das Programm unter einer sehr
liberalen Lizenz (BSD), die den Einsatz auch in kommerziellen Applikationen
ermoeglicht.
PostgreSQL ist mit einer sehr ausfuehrlichen Dokumentation ausgestattet,
die auf der Homepage des Projekts zu finden ist. Zu beachten ist dabei,
dass die Konfiguration des Datenbankservers auf eisfair ueber die eisfair
Konfigurationsschnittstelle erfolgt und nicht, wie im Kapitel "Server
Administration" beschrieben, direkt mit den Konfigurationsdateien des
Programms gearbeitet werden sollte.
Weitere Informationen zu PostgreSQL finden sich auf der offiziellen Web-
Seite des Projekts "http://www.postgresql.org" oder in deutscher Sprache
unter "http://www.postgresql.de".
2 Installation
--------------
Das Installationsskript fuehrt die Installation des Datenbankservers aus,
ohne dass weitere Angaben notwendig sind.
Zu beachten ist, dass das PostgreSQL-Paket ab der Versio 9.6.5 in
versionierter Form angeboten wird. Damit ist gemeint, dass an den Paket-
namen zukuenftig die Major- und Minor-Nummer der Paketversion angefuegt
wird. So wird aus "postgresql" beispielsweise "postgresql16".
Dies hat eine Reihe von Konsequenzen:
* Es koennen mehrere Versionen von PostgreSQL parallel auf einem System
installiert sein.
* Die Uebernahme der Daten aus einer aelteren Version kann und muss
manuell durch den Anwender erfolgen.
* Ein Hauptversionssprung wird nicht laenger durch den Paketmanager
automatisch vorgenommen. Statt dessen entsteht durch die neue Version
ein neuer Paketnamen, der manuell installiert werden muss. Korrigierte
Versionen innerhalb der selben Versionslinie (z.B. 12.x) werden dagegen
automatisch aktualisiert.
* Der Anwender kann den Ort frei waehlen, in dem das Datenverzeichnis
des Server angelegt werden soll. Bei einer Deinstallation werden diese
Daten nicht laenger automatisch geloescht.
* Die von PostgreSQL abgeleitete Client-Bibliothek "libpq" wird immer
von der neusten Version des Datenbankservers entnommen und nicht ver-
sioniert. Die Bibliothek ist zu aelteren Versionen rueckwaerts-
kompatibel.
Nach der Installation ist das Paketmenue unterhalb des Menuepunktes
"Database server administration" zu finden.
3 Konfiguration
---------------
Die Konfiguration von PostgreSQL unter eisfair erfolgt ueber den Menuepunkt
"Edit configuration" im Paketmenue. Die vorgenommenen Aenderungen werden nach
Beenden des Editors automatisch uebernommen. Achtung: Dabei wird der Server
neu gestartet und alle Client-Verbindungen getrennt.
3.1 Allgemeine Einstellungen
----------------------------
START_POSTGRESQL16
Wird dieser Wert auf "yes" gestellt, dann wird der PostgreSQL Dienst
automatisch beim Start des Rechners mitgestartet. Anderenfalls ist das
Starten und Beenden des Dienstes ueber das Paketmenue jederzeit moeglich.
Gueltige Werte: "yes", "no"
POSTGRESQL16_DATADIR
Die Einstellung legt fest, unterhalb welchem Pfad das Verzeichnis an-
gelegt werden soll, innerhalb dessen die Daten der Datenbanken abge-
legt werden sollen. Stellt die Konfigurationsschicht fest, dass das
angegebenen Verzeichnis noch nicht existiert, dann wird es automatisch
angelegt und es wird ein neuer Datenbank-Cluster initialisiert.
Beispiel: "/var/lib/pgsql16"
POSTGRESQL16_ENCODING
Hier wird die Zeichenkodierung eingestellt, mit der der oben angegebene
Speicherort fuer Datenbanken initialisiert werden soll. Zugleich ist
dies die Standardeinstellung fuer neu erzeugte Datenbanken.
Zu beachten ist, dass diese Einstellung nur dann wirksam wird, wenn
der Speicherort erstmalig initialisiert wird, was normalerweise nur
einmalig nach der Installation und der Aktvierung der Konfiguration
der Fall ist. Ebenso findet die Initialisierung statt, wenn ein
anderer leerer Speicherort (siehe oben) gewaehlt wird.
Beispiel: "LATIN9"
POSTGRESQL16_NETWORKING
Hiermit wird festgelegt, ob der Datenbankdienst ueber das Netzwerk er-
reichbar sein soll, oder nicht. Steht der Wert auf "no", kann nur vom
lokalen Rechner aus auf die Datenbanken zugegriffen werden, anderenfalls
ist dies auch von anderen Rechnern im Netzwerk oder auch aus dem Internet
moeglich. Zu beachten ist aber, dass zusaetzlich die Zugriffstabelle
(Host access table) bestimmt, welche Verbindungen erlaubt sind und welche
nicht.
Gueltige Werte: "yes", "no"
POSTGRESQL16_CONNECT_PORT
Dies ist die Anschlussnummer, ueber die der Datenbankserver ueber das
Netzwerk erreichbar ist, sobald POSTGRESQL16_NETWORKING dies zulaesst.
Die Nummer beeinflusst ebenfalls den Namen der benannten Pipe, ueber
die lokal auf den Server zugegriffen werden kann.
Bitte unbedingt beachten: Sobald mehrere Versionen von PostgreSQL
auf einem Rechner gleichzeitig ausgefuehrt werden sollen, muessen sich
diese Server hinsichtlich der Anschlussnummer unterscheiden! Anderen-
falls wird mindestens einer der Dienste nicht lauffaehig sein bzw.
nicht erreicht werden koennen.
Standard: "5432"
POSTGRESQL16_CONNECTIONS
Hiermit wird definiert, wieviele gleichzeitige Zugriffe auf den Daten-
bankserver moeglich sein sollen. Diese Zahl bestimmt den Speicherbedarf
des Programms und kann aus oekonomischen Grunden angepasst werden.
Dabei ist zu beachten, dass auch der "Autovacuum-Dienst" und die auto-
matische Datensicherung jeweils einen eigenen Zugriff erfordern.
Standard: "10"
POSTGRESQL16_ENABLE_SSL
Diese Option ermoeglicht es, die SSL Unterstuetzung von PostgreSQL zu
aktivieren und zu parametrieren. Sobald SSL aktiviert ist, kann in
der Zugriffstabelle (siehe unten) der Zugriffstyp 'hostssl' verwendet
werden, um den Zugriff auf den Datenbankserver auf verschluesselte
Verbindungen zu beschraenken.
Gueltige Werte: "yes", "no"
POSTGRESQL16_SSL_CERT_FILE
Dies ist der Name des Server-Zertifikats. Diese Datei muss zuvor er-
zeugt worden sein (beispielsweise mithilfe des certs-Pakets) und muss
sich im Ordner /etc/ssl/certs befinden. Die Angabe des Dateinamens
erfolgt ohne Pfad.
Beispiel: "database_server.pem"
POSTGRESQL16_SSL_KEY_FILE
Passend zum Server-Zertifikat wird hier der private Schluessel an-
gegeben. Diese Datei muss zuvor erzeugt worden sein (beispielsweise
mithilfe des certs-Pakets) und muss sich im Ordner /etc/ssl/private
befinden. Die Angabe des Dateinamens erfolgt ohne Pfad.
Beispiel: "database_server.key"
POSTGRESQL16_SSL_CLIENT_VERIFY
Hiermit wird die Moeglichkeit aktiviert, valide Signaturen von Client
Zertificaten zu pruefen. Diese Option is erforderlich, um die Verifi-
zierungsmethoden 'verify-ca' oder 'verify-full' in der Zugriffstabelle
nutzen zu koennen.
Gueltige Werte: "yes", "no"
POSTGRESQL16_SSL_CA_FILE
Hiermit wird der Name der CA Zertifikatsdatei angegeben, die ein
oder auch mehrere Zertifikate von Authentifizierungsstellen enthaelt,
der/denen bei der Pruefung der Signatur von Client-Zertifikaten vertraut
werden soll.
Beispiel: "local_CA.pem"
3.2 Zugriffstabelle
-------------------
POSTGRESQL16_HOST_N
Anzahl der Eintraege in der Zugriffstabelle (Host access table).
Ueber die Zugriffstabelle kann vorgegeben werden, wer von wo auf welche
Datenbank zugreifen darf und welches Anmeldeverfahren dabei zum
Einsatz kommt. Siehe hierzu auch "PostgreSQL und Sicherheit"
Beispiel: "2"
POSTGRESQL16_HOST_x_TYPE
Legt fest, ob hiermit ein lokaler Zugriff ueber einen Unix-Domain-Socket
(local) oder ein Netzwerkzugriff ueber TCP/IP (host/hostssl/hostnossl) be-
schrieben werden soll. Zudem kann der Netzwerkzugriff SSL verschuesselt
sein (host/hostssl). Im Fall von 'host' kann der Client bestimmen, ob eine
SSL Verschluesselung verwendet werden soll oder nicht.
Gueltige Werte: local, host, hostssl, hostnossl
POSTGRESQL16_HOST_x_NETWORK
Ist nur dann anzugeben, wenn ein Netzwerkzugriff beschrieben werden soll.
Hier wird angegeben, aus welchem Adressbereich (Quelladresse) ein Rechner
kommen darf, damit dieser Eintrag fuer ihn zutrifft.
Der Adressbereich wird in der kombinierten Schreibweise aus IP-Adresse/
Subnetz angegeben.
Beispiel: "192.168.0.0/16" = Alle Adressen 192.168.x.x
"192.168.56.3/0" = Nur der Rechner 192.168.56.3
POSTGRESQL16_HOST_x_USERAUTH
Hier wird festgelegt, wie sich der Datenbankanwender bzw. das Client-
Programm an dem Datenbankserver anzumelden hat. Dazu gibt es eine Reihe
unterschiedlicher Verfahren:
"trust": Der Client benoetigt kein Kennwort - ihm wird immer vertraut.
"reject": Der Client darf sich nicht anmelden.
"md5": Der Client tauscht sein Kennwort mit dem Server ueber eine
md5 Checksumme aus (empfohlen).
"crypt": Der Client schickt sein Kennwort verschluesselt an den Server.
"password": Der Client schickt sein Kennwort unverschlusselt.
"krb4": Das Kerberos 4 Anmeldeverfahren wird verwendet.
"krb5": Das Kerberos 5 Anmeldeverfahren wird verwendet.
"ident": Die Anmeldung erfolgt ueber Ident.
"pam": Die Anmeldung erfolgt ueber PAM.
Siehe hierzu auch "PostgreSQL und Sicherheit"
POSTGRESQL16_HOST_x_DATABASE
Gibt an, fuer welche Datenbank dieser Eintrag in der Zugriffstabelle gilt.
Mit "all" werden alle Datenbanken zugleich angegeben.
Beispiel: "all"
POSTGRESQL16_HOST_x_USER
Gibt an, fuer welchen Datenbankanwender dieser Eintrag in der Zugriffs-
tabelle gueltig ist. Mit "all" werden alle bekannten Anwender zugleich
angegeben.
Beispiel: "all"
POSTGRESQL16_HOST_x_CLIENTCERT
Legt die Strategie fest, mit der SSL Client-Zertifikate verifiziert wer-
den sollen. Diese Option ist nur dann von Bedeutung (bzw. wird nur dann
aktiv), wenn sowohl POSTGRESQL16_ENABLE_SSL als auch POSTGRESQL16_SSL_
CLIENT_VERIFY aktiviert wurden und zudem der aktuelle Tabelleneintrag vom
Typ "hostssl" ist.
Es gibt drei moegliche Einstellungsmoeglichkeiten:
"none": Es findet keinerlei Verifizierung statt (default).
"verify-ca": Die Signatur des Client-Zertifikats muss von einer ver-
trauenswuerdigen Zertifizierungsstelle stammen.
"verify-full": Entspricht "verify-ca", jedoch muss zudem der CN des
Zertifikats dem Datenbankanwender entsprechen.
3.3 Leistung und Resourcen-Verteilung
-------------------------------------
POSTGRESQL16_AUTOVACUUM
Mit der Zeit kann es bei Datenbanken zu einer gewissen Fragmentierung
kommen, die zum Teil zu spuerbaren Einbruechen in der Leistungsfae-
higkeit des Servers fuehren kann. Darum empfiehlt es sich bei PostgreSQL
in regelmaessigen Abstaenden das SQL-Kommando "VACUUM FULL" an den
Server zu senden.
Alternativ dazu kann ein Dienst gestartet werden, der sog. Autovacuum-
Dienst, der den Zustand der Datenbank ueberwacht und die Tabellen ggf.
selbststaendig optimiert.
Gueltige Werte: "yes" "no"
POSTGRESQL16_MEMORY_LAYOUT
Wie bei den meisten Datenbankservern hat auch bei PostgreSQL die Zu-
teilung von Arbeitsspeicher einen grossen Einfluss auf die Arbeits-
geschwindigkeit des Dienstes. Zugleich sollte die Zuteilung so er-
folgen, dass auch fuer die uebrigen Dienste dieses Systems ausreichend
Speicher zur Verfuegung steht.
Damit die Konfiguration nicht unnoetig verkompliziert wird, stehen
seitens der eisfair-Konfiguration vier verschiedene Speicherprofile
zur Verfuegung. Abhaengig vom vorhandenen Arbeitsspeicher kann nach
der folgenden Tabelle daraus gewaehlt werden:
RAM-Konfiguration
small: ... bis 512MB
medium: 512MB bis 2GB
large: 2GB bis 4GB
huge: 4GB bis ...
Innerhalb der Serverkonfiguration wird der Speicher anschliessend wie
folgt aufgeteilt:
shared_buffers temp_buffers work_mem maintenance_work_mem
small 16MB 4MB 1MB 8MB
medium 128MB 8MB 4MB 64MB
large 256MB 16MB 8MB 128MB
huge 512MB 32MB 16MB 256MB
Beispiel: "medium"
POSTGRESQL16_WRITE_MODE
Auch die Art und Weise, wie und wann die Daten auf die Festplatte ge-
schrieben werden, hat einigen Einfluss auf die Arbeitsgeschwindigkeit
des Servers. Der Anwender hat dabei die Wahl innerhalb von vier Stufen
einen Kompromiss zwischen einer sehr sicheren, aber langsamen oder
einer sehr schnellen, dafuer aber unsicheren Arbeitsweise zu waehlen.
Die Sicherheit bezieht sich dabei auf die Konsistenz der Datenbanken
im Fall eines ploetzlichen unerwarteten Stromausfalls.
secure: sicher aber langsam.
normal: im Zweifelsfall die beste Wahl.
fast: schnelle Betriebsart. Es koennen jedoch die zuletzt ge-
schriebenen Daten verloren gehen.
nosync: sehr schnell. Die Datenbanken koennen jedoch korrumpieren.
Nur in speziellen Situationen sinnvoll.
Innerhalb der Serverkonfiguration werden dabei die folgenden Optionen
beeinflusst:
fsync synchronous_commit commit_delay
secure yes on 0
normal yes on 100
fast yes off 1000
nosync no off 0
Beispiel: "normal"
3.4 Protokoll-Einstellungen
---------------------------
POSTGRESQL16_LOG_SETTINGS
Wird diese Option auf "yes" gestellt, dann kann mit den folgenden
Optionen die Art und Weise beeinflusst werden, wie PostgreSQL Protokoll-
ausgaben durchfuehrt. Anderenfalls werden die jeweiligen Standardwerte
verwendet.
Standard: "no"
POSTGRESQL16_CLIENT_LOG_LEVEL
Steuert in welcher Detailtiefe Nachrichten an den Client gesendet wer-
den. Gueltige Werte sind: DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, LOG,
NOTICE, WARNING, ERROR, FATAL und PANIC. Jede Detailebene enthaelt
alle Ebenen die ihr folgen. Die Werte sind in absteigender Folge dar-
gestellt. Je weiter hinten ein Wert ausgewaehlt wird, je weniger Nach-
richten werden gesendet. Es ist zudem zu beachten, das LOG hier einen
anderen Stellenwert hat, als unter SERVER_LOG_LEVEL.
Standard: "notice"
POSTGRESQL16_SERVER_LOG_LEVEL
Steuert in welcher Detailtiefe Nachrichten in das Server-Logfile ge-
schrieben werden.
Gueltige Werte sind: DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, NOTICE,
WARNING, ERROR, LOG, FATAL und PANIC. Jede Detailebene enthaelt
alle Ebenen die ihr folgen. Die Werte sind in absteigender Folge dar-
gestellt. Je weiter hinten ein Wert ausgewaehlt wird, je weniger Nach-
richten werden geschrieben. Es ist zudem zu beachten, das LOG hier einen
anderen Stellenwert hat, als unter CLIENT_LOG_LEVEL.
Standard: "notice"
POSTGRESQL16_LOG_VERBOSE
Steuert ob Eintraege im Server-Logfile ausfuehrlich oder normal erfolgen
sollen.
Standard: "no"
POSTGRESQL16_LOG_STATEMENTS
Hiermit koennen SQL-Statements im Server-Logfile mitgeschrieben werden.
Standard: "no"
3.5 Sicherung
-------------
POSTGRESQL16_BACKUP_TIMER
Mit dieser Einsellung kann festgelegt werden, wann (zu welchem Zeit-
punkt) eine Datensicherung durchgefuehrt werden soll.
Zur Ausfuehrung von Backups zu bestimmten Zeitpunkten, werden systemd
Timer verwendet. Systemd-Timer sind sehr flexibel, was sich auch in
der Syntax der Zeitangaben wiederspiegelt. Um die Komplexitaet ueber-
schaubar zu halten, werden hier lediglich Kalenderereignisse unter-
stuetzt.
Allgemein wird ein Kalenderereignis gemaes dem nachfolgenden Schema
beschrieben:
DayOfWeek Year-Month-Day Hour:Minute:Second
Fuer Datenfelder innerhalb des Schemas, die nicht beachtet werden
sollen, kann der Asterisk als Platzhalter verwendet werden. Werte-
bereiche koennen mit zwei Punkten zwischen dem unteren und dem oberen
Grenzwert angegeben werden. Eine Reihe von Einzelwerten wird dagegen
durch Kommas getrennt.
Beispiele gueltiger Eintraege sind:
DayOfWeek Year-Month-Day Hour:Minute:Second
Mon,Tue *-*-01..04 12:00:00
Sat *-*-1..7 18:00:00
*-*-* 04:00:00
POSTGRESQL16_BACKUP_TARGET
Das Verzeichnis, in das die Sicherungsdateien abgelegt werden sollen.
Standard: "/var/lib/pgsql_backup"
POSTGRESQL16_BACKUP_MOUNT
Bevor die Sicherung beginnt, wird das hier angegebene Kommando ausge-
fuehrt. Dies kann verwendet werden, um beispielsweise das Sicherungs-
medium in das Dateisystem einzubinden.
Soll kein Befehl ausgefuehrt werden bleibt das Feld leer.
Beispiel: "mount -t udffs /dev/sr0 /mnt"
POSTGRESQL16_BACKUP_NOTIFY
Wird hier eine e-mail Adresse angegeben, erfolgt im Falle von Fehlern
bei der Datensicherung eine Benachrichtigung an den hier angegebenen
Empfaenger. Soll keine Benachrichtigung erfolgen bleibt das feld leer.
Hinweis: Die Benachrichtigung funktioniert nur dann, wenn das E-mail
Paket installiert ist.
Beispiel: "dbadmin@localhost"
POSTGRESQL16_BACKUP_CLUSTER
Hiermit wird vorgegeben, ob im Zuge einer Datensicherung der gesamte
Datenbank-Cluster in einem einzigen Sicherungsarchiv ausgelagert werden
soll. Neben den einzelnen Datenbanken werden damit unter anderem auch
Anwender und Gruppen gesichert.
POSTGRESQL16_BACKUP_CLUSTER_USER
Name des Datenbankanwenders, der ausreichende Zugriffsrechte fuer die
Sicherung des gesamten Datenbank-Clusters besitzt. Da der user "postgres"
immer existiert, ist dieser immer eine gute Wahl.
Beispiel: "postgres"
POSTGRESQL16_BACKUP_CLUSTER_MAX
Gibt an, wie viele Kopien der Sicherungsdatei des Datenbank-Clusters
aufgehoben werden sollen.
POSTGRESQL16_BACKUP_DATABASES
Zusaetzlich (oder alternativ) koennen neben der Sicherung des gesamten
Datenbank-Clusters auch individuelle Datenbanken in separaten Archiven
gesichert werden. Dies bietet den Vorteil, dass diese damit auch
einzeln wiederhergestellt oder migriert werden koennen.
Diese Option aktiviert die Sicherung von individuellen Datenbanken.
POSTGRESQL16_BACKUP_N
Anzahl Datenbanken, die gesichert werden sollen. Jede der angegebenen
Datenbanken wird in einer Datei mit folgendem Namen abgelegt:
--.backup
Beispiel: "2"
POSTGRESQL16_BACKUP_x_DBNAME
Name der Datenbank, die gesichert werden soll.
POSTGRESQL16_BACKUP_x_USER
Name des Datenbankanwenders, der ausreichende Zugriffsrechte fuer die
Sicherung der angegebenen Datenbank hat. Da der user "postgres"
immer existiert, ist dieser immer eine gute Wahl.
Beispiel: "postgres"
POSTGRESQL16_BACKUP_x_MAX
Gibt an, wieviele Kopien der Sicherungsdatei der angegebenen Datenbank
aufgehoben werden sollen.
Beispiel: "7"
4 Das Paketmenue
----------------
4.1 PostgreSQL administration
-----------------------------
* View documentation
Dokumentation zum Paket PostgreSQL auf eisfair anzeigen.
* Edit configuration
Konfiguration des Datenbankservers ueber die eisfair-Konfigurations-
ebene bearbeiten.
* Advanced configuration file handling
Versionsverwaltung der Konfiguration des Datenbankservers.
* Start PostgreSQL server
Den Datenbankdienst starten.
* Stop PostgreSQL server
Den Datenbankdienst beenden.
* Show status and connects
Den aktuellen Status des Servers und die aktiven Client Verbindungen zu
diesem anzeigen.
* PostgreSQL tools
Untermenue: Eine Sammlung von Werkzeugen zur Verwaltung von Datenbanken.
4.2 PostgreSQL tools
--------------------
* Database Administrator
Start des curses basierten Programms fuer die Verwaltung von Datenbanken,
Anmelderollen und Gruppenrollen. Siehe Kapitel 7 fuer weitere Einzelheiten.
* Database Administrator (remote)
Start des curses basierten Programms fuer die Verwaltung von Datenbanken,
Anmelderollen und Gruppenrollen. Siehe Kapitel 7 fuer weitere Einzelheiten.
Mit der "remote"-Option ist ein Zugriff ueber das Netzwerk auf entfernte
Datenbankserver moeglich.
* Backup and restore
Untermenue: Hier koennen Datenbanken gesichert und wiederhergestellt
werden.
* Set local password
Hier kann ein Kennwort fuer den loklen Zugriff von administrativen Diensten
(z. B. Sicherung, Autovacuum ...) festgelegt werden.
* Start SQL interpreter
Start eines Programms zur direkten Eingabe von SQL-Befehlen.
4.3 PostgreSQL backup and restore
---------------------------------
* Backup database cluster
Diese Funktion erlaubt es, alle Daten eines Servers vollstaendig zu sichern.
Eine vollstaendige Sicherung schließt auch globale Daten wie Benutzer und
Gruppen mit ein.
Ein moeglicher Anwendungsfall ist beispielsweise die Migration der Daten
eines Servers auf einen neuere PostgreSQL Version.
* Restore database cluster
Wiederherstellung aller Daten eines Servers aus einer zuvor erstellten
Sicherungsdatei.
* Backup database
Hiermit kann eine einzelne Datenbank in eine Datei im Sicherungsverzeichnis
manuell gesichert werden.
* Restore database
Hier wird die Wiederherstellung einer Datenbank aus einer Sicherung vorge-
nommen.
* List backup files
Auflistung aller Sicherungsdateien im Sicherungsverzeichnis in chronologischer
Reihenfolge.
5 PostgreSQL und Sicherheit
---------------------------
Um die Installation zu erleichtern, ist die Tabelle fuer den Zugriff auf den
Datenbankserver so voreingestellt, dass vom lokalen Rechner aus keine
Kennworteingabe erforderlich ist. Fuer den Betrieb im produktiven oder
sicherheitskritischen Umfeld ist diese Voreinstellung jedoch nicht geeignet,
da jeder Anwender, der sich auf dem Server anmelden darf, als User 'postgres'
eine Client-Verbindung zum Server herstellen kann und damit vollen
administrativen Zugriff auf die Datenbanken hat.
Um diese Sicherheitsluecke zu schliessen sind folgende Schritte auszufuehren:
Schritt 1: Kennwort fuer den User 'postgres' festlegen
Ueber den SQL-interpreter wird dazu das Kommando ALTER USER... wie folgt
abgesetzt, wobei 'password' gegen ein beliebiges Kennwort zu ersetzen
ist:
template1=# ALTER USER "postgres" WITH PASSWORD 'password';
Der Server bestaetigt den Befehl mit "ALTER USER".
Schritt 2: Lokales Kennwort festlegen
Damit administrative Dienst, wie die Sicherung oder der Autovacuum-Dienst
auch in Zukunft mit dem Server ohne Kennworteingabe kommunizieren koennen,
wird das im Schritt 1 angegebene Kennwort im Heimatverzeichnis des
Unix-Anwenders "root" gespeichert. Dazu sollte man ungedingt als Anwender
"root" oder "eis" an dem Server angemeldet sein.
Zum Festlegen des lokalen Kennworts dient der Menuepunkt "Set password for
local access".
Schritt 3: Zugriff einschraenken
In der Konfiguration werden im Abschnitt "Host access table" die Eintraege
fuer den lokalen Zugriff von "trust" auf z. B. "md5" gesetzt, wodurch eine
Authentifizierung des Clients erzwungen wird.
6 Methoden der Benutzerauthentifizierung
========================================
Die Anmeldung am Datenbankserver kann auf unterschiedliche Art erfolgen.
Welche Methode verwendet wird, legt dabei die Zugriffstabelle in der
Konfiguration fest. Generell gilt, dass das Anmeldekonto auf dem
Server als Login-Rolle existieren muss. Lediglich die Ueberpruefung des
Kennworts erfolgt dann auf unterschiedliche Weise. Dabei ist zu unter-
scheiden zwischen den Methoden, die das Kennwort des Benutzers gegen das
Kennwort der Login-Rolle authentifizieren (md5, password, crypt ...) und den
Methoden, die einen externen Passwort-Server dazu verwenden (pam, kerberos).
Die empfohlene Methode ist md5, da hier lediglich ein Hash-Wert, nicht aber
das Kennwort selbst ausgetauscht wird. Als Kennwort gilt das Kennwort der
Login-Rolle.
6.1 Ident Authentifizierung
===========================
Bei der Ident-Authetifizierung wird kein Kennwort ueberprueft. Es wird lediglich
ein auf dem Client laufender Ident-Daemon angefragt, unter welchem Benutzer-
namen die Verbindung initiiert wurde. Dieser User sollte dann auf dem
Datenbankserver unter dem gleichen Namen eine entsprechende Login-Rolle
besitzen.
6.2 PAM Authentifizierung
=========================
PAM ist eine sehr flexible Moeglichkeit der Benutzerauthentifikation, da hier
eine zentrale Abstraktionsschicht (die PAM-Konfiguration) festlegt, wie
die Authentifizierung erfolgen soll. So kann beispielsweise gegen die lokalen
Systemdateien (/etc/passwd, /etc/shadow, /etc/group) ebenso authentifiziert
werden, wie ueber einen LDAP-Server. Allerdings ist dazu etwas Handarbeit
noetig:
Bei der Anmeldung ueber die Systemdateien (/etc/passwd,/etc/shadow,/etc/group)
wird unter /etc/pam.d eine Datei mit dem Namen "postgresql" und dem folgen-
den Inhalt angelegt:
#%PAM-1.0
auth required pam_unix.so
account required pam_unix.so
session required pam_unix.so
Desweiteren benoetigt der Unix-Account "postgres", unter dessen User-ID der
Datenbankserver laeuft, einen Lesezugriff auf die Datei /etc/shadow, die
normalerweise nur von "root" gelesen weden kann. Die wohl eleganteste
Methode dazu ist, eine Gruppe fuer den Lesezugriff einzurichten und den
User "postgres" darin aufzunehmen. Dann wird die Gruppenzugehoerigkeit der
Datei /etc/shadow geaendert und das Lesebit fuer die Gruppe gesetzt. Beispiel:
Gruppe: shadow
Mitglied: postgres
chown root:shadow /etc/shadow
chmod g+r /etc/shadow
Quelle: http://itc.musc.edu/wiki/PostgreSQL
Hier findet sich auch eine Anleitung fuer LDAP ueber PAM.
WICHTIG: Auf eisfair-1 ist ab der Version 1.6.6 des Basissystems die Gruppe
shadow bereits eingerichtet und auch die Berechtigungen auf die Datei
/etc/shadow sind bereits gesetzt. Es genuegt hier, den User postgres in
die Gruppe shadow aufzunehmen.
7 Sicherung und Wiederherstellung
=================================
Es kann entwerder manuell ueber das Menue oder automatisch per CRON-Daemon
eine Sicherung von Datenbanken vorgenommen werden. Im Falle der manuellen
Sicherung wird dazu der Menuepunkt "Backup database" im Untermenue "Post-
greSQL Tools" gewaehlt und anschliessend die Datenbank angegeben, die ge-
sichert werden soll. Die Sicherungsdatei wird in dem Verzeichnis abgelegt,
das in der Konfiguration fuer POSTGRESQL16_BACKUP_TARGET angegeben wurde. Die
Standardeinstellung ist '/var/lib/pgsql_backup'.
Im Falle der automatischen Sicherung per CRON-Daemon wird in der Paket-
konfiguration angegeben, welche Datenbanken zu sichern sind, wieviele
Kopien der Sicherungsdatei aufbewahrt werden sollen und wann die Sicherung
stattfinden soll. Zudem kann eine E-mail-Adresse angegeben werden, an
die im Fehlerfall eine Nachricht verschickt wird.
Der Dateinamen wird bei beiden Sicherungsvarianten wie folgt zusammen-
gesetzt:
--.backup
Das ISO-Datumsformat: JJJJ-MM-TT
Zeitformat: HHMMSS
Beispiele:
-rw-r--r-- 1 root root 4309287 Oct 29 00:31 testdb-2005-10-29-003003.backup
-rw-r--r-- 1 root root 4309287 Oct 30 00:31 testdb-2005-10-30-003004.backup
Zur Wiederherstellung der Daten einer Sicherungsdatei wird zunaechst eine
leere Datenbank, sowie alle erforderlichen Datenbankanwender angelegt.
Anschliessend kann die Wiederherstellung ueber den Menuepunkt "Restore database"
vorgenommen werden.
Zuerst erfolgt eine Auswahl einer Datei aus dem unter POSTGRESQL16_BACKUP_TARGET
angegebenen Verzeichnis, dann wird als Ziel der Operation die neu angelegte
Datenbank ausgewaehlt.
Wie ueblich gilt auch hier: Es ist besser nicht blind der Sicherung zu ver-
trauen, sondern die Wiederherstellung der Daten auszuprobieren, bevor es
zum GAU kommt.
8 PostgreSQL Administrator
==========================
Die skriptbasierte Datenbankverwaltung wurde durch ein curses-basiertes
Administrationsprogramm ersetzt, welches einfacher zu bedienen und in Zukunft
leichter zu erweitern ist.
Nach dem Programmstart wird ein Anmeldedialog gezeigt, ueber den man sich
am Datenbankserver anmelden kann. Standardmaessig gibt es keine Zugriffsbe-
grenzung fuer den lokalen Zugriff (ueber Unix-Sockets), so dass der Dialog
einfach mit ENTER bestaetigt werden kann. Gleiches gilt wenn ueber "Set local
password" ein Kennwort fuer den jeweiligen Anwender hinterlegt wurde.
Das Programm hat ein dreigeteiltes Layout: Auf der linken Seite ist ein
Auswahlmenue angebracht, ueber das die einzelnen Programmbereiche erreicht
werden. Im rechten oberen Bereich befindet sich die Uebersichtsliste der
Datenbankobjekte, die im jeweiligen Programmbereich bearbeitet werden. Im
rechten unteren Bereich ist ein Hilfefenster angebracht, das spezifische
Hilfe zum jeweiligen Programmbereich enthaelt.
Der Eingabefocus laesst sich mit der TAB-Taste im gesamten Programm ver-
schieben und die im jeweiligen Programmbereich aktiven Funktionen sind ueber
Funktionstasten direkt zu erreichen. Siehe dazu auch die Hinweise in der
Statusleiste des Programms am unteren Rand.
Damit das Programm auch ohne Funktionstasten zu bedienen ist, sind alle
Funktionen zusaetzlich ueber ein Menue erreichbar. Dazu bewegt man den Eingabe-
cursor auf die Uebersichtsliste und drueckt dort die ENTER-Taste. Verlassen
kann man das Programm ueber die F10 Taste oder mit Hilfe der Menues.
9 PostgreSQL Module (Information fuer Paketentwickler)
=====================================================
Um fuer zukuenftige Erweiterungen offen zu sein, sieht PostgreSQL in seiner
Menuestruktur eine Schnittstelle vor, die von Erweiterungspaketen verwendet
werden kann. Dazu muss lediglich im Menueverzeichnis unter "/var/install/menu"
eine Datei abgelegt werden, die der folgenden Namenskonvention entspricht:
setup.services.postgresql.modules..menu
Diese Datei wird beim Oeffnen dynamisch in das Modulmenue eingebunden. Dazu
sollten aber in der Menuedatei unbedingt die Tags und
definiert sein.
Der Vorteil der dynamischen Bindung ist, dass Erweiterungsmodule zur Lauf-
zeit ermittelt werden und bei einem Update des Datenbankservers nicht mehr
verloren gehen koennen.
In Zukunft wird es weitere Schnittstellen geben, die z. B. Erweiterungen
zum PostgreSQL Administrator anbieten. Da hier jedoch die Anforderungen noch
nicht bekannt sind, werden diese Schnittstellen erst bei Bedarf implementiert.