PostgreSQL, oft auch nur Postgres genannt, ist ein freies Open-Source objektrelationales Datenbankmanagementsystem mit vielen erweiterten Funktionen für die Erstellung von fehlertoleranten Umgebungen und komplexen Anwendungen. In dieser Anleitung für die Installation einer PostgreSQL-Datenbank verwenden wir Linux Ubuntu 20.04.
PostgreSQL ist bereits in den meisten Linux-Distributionen enthalten, was praktisch ist, so können wir die Datenbank direkt aus dem Ubuntu-Standard-Repository installieren und sparen uns die Einbindung von weiteren Paketquellen.
Eine installierte Postgres-Datenbank ist weitgehend konform mit offiziellen SQL-Standards. Die meisten Funktionen verhalten sich fast identisch, sodass sich jeder Administrator, der einen Wechsel von SQL in Erwägung zieht, schnell zurechtfinden wird. Ferner werden ähnlich wie bei Transact-SQL (T-SQL) auch Aggregat-Funktionen und Operatoren unterstützt. Zum Zeitpunkt der Erstellung von diesem Tutorial war die neuste Version von PostgreSQL die Versionsnummer 14, die am 30. September 2021 veröffentlicht wurde.
Inhaltsverzeichnis: Installation und Konfiguration einer PostgreSQL-Datenbank auf Ubuntu 20.04
PostgreSQL auf Linux Ubuntu 20.04 installieren
Beginnen wir mit der Installation von PostgreSQL auf einen aktuellen Linux Ubuntu-Server 20.04. Führe folgende Befehle aus, um die Paketquellen zu aktualisieren und die Datenbank zu installieren:
sudo apt update
sudo apt install postgresql postgresql-contrib
In dieser Installationsanleitung installieren wir auch das PostgreSQL-Contrib-Paket. Das Paket bietet eine ganze Reihe zusätzlicher Funktionen für das Datenbanksystem. Sobald die Installation abgeschlossen wurde, wird die Postgre-SQL-Datenbank (Dienst) automatisch gestartet.
Verwende folgenden Befehl, um die Versionsnummer zu überprüfen und kontrolliere, ob die Installation erfolgreich verlaufen ist und der PostgreSQL-Dienst läuft:
sudo -u postgres psql -c "SELECT version();"
Erhältst du eine Versionsnummer zurück? Dann hat die Installation funktioniert und Postgres kann direkt verwendet werden. Sollte der Dienst nicht automatisch ausgeführt worden sein, kann die PostgreSQL-Datenbank mit diesem Befehl gestartet werden:
sudo service postgresql-14.0 start
Möchtest du jetzt aktiv an deiner Datenbank arbeiten, um eine Datenbank (CREATE DATABASE) zu erstellen oder Konfigurationen vorzunehmen, kannst du über die Shell (Terminal) folgenden Befehl verwenden, um das Postgres-Befehlszeilen-Werkzeug zu starten:
sudo -u postgres psql
PostgreSQL-Datenbankzugriffsberechtigungen und Authentifizierungsmethoden
Datenbankzugriffsberechtigungen werden von einer PostgreSQL-Datenbank von Rollenkonzepten (Roles) geregelt. Was soviel heißt wie, dass ein einzelner Datenbankbenutzer oder eine Gruppe von mehreren Datenbankbenutzern dazu authentifiziert sein können, um Einträge, Konfigurationen oder Befehle auszuführen.
Postgres unterstützt dabei mehrere Methoden für die Authentifizierung:
- Kennwort: Eine Rolle kann sich mit der Verwendung eines Passworts authentifizieren
- Ident: Wird nur bei TCP/IP-Verbindungen unterstützt. Der Benutzer authentifiziert sich über den Benutzernamen vom Client des angemeldeten Betriebssystems.
- Peer: Handhabt sich ähnlich wie eine Authentifizierung mittels Ident, jedoch ausschließlich über eine lokale Netzwerkverbindung.
- Trust: Eine Rolle benötigt kein Passwort für den Zugriff, solange die Bedingungen in der „pg_hba.conf“ geregelt und erfüllt sind.
Die Client-Authentifizierung wird standardgemäß über die Konfigurationsdatei „pg_hba.conf“ definiert und verwendet die Peer-Methode für die Authentifizierung an der PostgreSQL-Datenbank
Bei der Installation einer PostgreSQL-Datenbank wird der Benutzer „postgres“ automatisch erzeugt. Dieser Benutzer hat Superrechte für die gesamte PostgreSQL-Instanz (verhält sich ähnlich wie bei dem MySQL-Root-Account).
Um eine Verbindung mit dem PostgreSQL-Server als Benutzer „postgres“ herzustellen, kann folgender Befehl verwendet werden. Es wird erst zu dem Benutzer mit Superrechten gewechselt und anschließend die Postgres-Instanz gestartet:
sudo su - postgres
psql
Aus Sicherheitsgründen ist es zu empfehlen, einen Datenbank-Server nicht direkt über das Internet freizugeben und ausschließlich vom lokalen System aus zu bedienen. Alle Eingaben sollten im besten Fall nur vom Benutzer postgres ausgeführt werden. Weitere Möglichkeiten folgen im nächsten Abschnitt.
Eine PostgreSQL-Datenbank erstellen, einen Benutzer anlegen und Rechte zuweisen
Neue Rollen können ausschließlich vom Superuser-Benutzer und Rollen mit dem Privileg „CREATEROLE“ erstellt werden. Es folgt ein Beispiel, wie eine neue PostgreSQL-Rolle erstellt werden kann:
Benutzer für die Rolle erstellen:
sudo su - postgres -c "createuser alex"
Eine neue PostgreSQL-Datenbank anlegen:
sudo su - postgres -c "createdb alexdb"
Dem neuen Benutzer die Rechte für die Datenbank über die PostgreSQL-Shell zuweisen:
GRANT ALL PRIVILEGES ON DATABASE alexdb TO alex;
Fernzugriff auf den PostgreSQL-Server einrichten
Standesgemäß kann auf einen PostgreSQL-Server nur über die lokale Schnittstelle zugegriffen werden. Immer wenn es notwendig wird, Zugriffe von anderen Clients und Servern als nur der Localhost (127.0.0.1) selbst zu ermöglichen, müssen Remote-Zugriffe konfiguriert werden.
Um den Remote-Zugang zu aktivieren, öffnen wir die PostgreSQL-Konfigurationsdatei und fügen IP-Adressen oder Subnetze ein, die wir für einen Zugriff authentifizieren möchten.
Öffne die PostgreSQL-Konfigurationsdatei mit folgendem Befehl (Versionsnummer berücksichtigen):
sudo nano /etc/postgresql/14/main/postgresql.conf
Füge eine IP-Adresse, wie im Beispiel beschrieben, der Konfigurationsdatei hinzu, indem du die folgende Zeile in diesem Sektor hinzufügst und durch eine oder mehrere IP-Adressen ergänzt:
Öffne die PostgreSQL-Konfigurationsdatei mit folgendem Befehl (Versionsnummer berücksichtigen):
# - Connection Settings –
listen_addresses = '192.168.178.0' # IP Adressen hinzufügen;
Speichere die Änderungen (STRG+S) ab und verlasse den Nano-Editor wieder (STRG+X). Starte den PostgreSQL-Dienst einmal neu, um die Änderungen wirksam zu machen und überprüfe, ob die Änderungen wirksam geworden sind, indem du folgenden Befehl eingibst:
sudo service postgresql restart
ss -nlt | grep 5432
Die Ausgabe sollte nun alle Interfaces anzeigen, die auf den Server zugreifen dürfen:
LISTEN 0 244 192.168.178.0:5432 0.0.0.0:*
Jetzt muss noch die Datei „pg_hba.conf“ konfiguriert werden, sodass Remote-Verbindungen akzeptiert werden. Es folgen einige Beispiele mit verschiedenen Möglichkeiten und Anwendungsbeispiele:
nano /etc/postgresql/14/main/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# Der Benutzer „alex“ hat Zugriff auf alle Datenbanken aus dem IP-Netz 192.0.0.0 und verwendet ein Kennwort:
host all alex 192.0.0.0/0 md5
# Der Benutzer „alex“ hat Zugriff auf die Datenbank „alexdb“ aus dem IP-Netz 192.168.0.0 und verwendet ein Kennwort:
host alexdb alex 192.168.0.0/0 md5
# Der Benutzer „alex“ hat Zugriff auf alle Datenbanken mit der IP-Adresse (192.168.178.10) ohne der Verwendung eines Kennwortes (Trusted):
host all alex 192.168.178.10 trust
Firewall (UFW) für den Fernzugriff auf den PostgreSQL-Server konfigurieren: Port freigeben
Da wir den Zugriff über den Port 5432 konfiguriert haben, müssen wir den Port noch in der Firewall freigeben. Angenommen du hast die PostgreSQL-Datenbank auf einem Ubuntu-Server installiert, verwendet der Server in den meisten Fällen die UFW (Uncomplicated Firewall).
Verwende den folgenden Befehl, um den Port für das Subnetz 192.168.178.0 freizugeben:
sudo ufw allow proto tcp from 192.168.178.0/24 to any port 5432
Installation und Konfiguration eines PostgreSQL Servers auf Linux Ubuntu 20.04 abgeschlossen
Die Installation eines PostgreSQL-Servers ist nun abgeschlossen. Du hast in diesem Artikel erfahren, wie du einen Fernzugriff einrichtest, wie die Firewall konfiguriert werden muss und wie Benutzerrollen erstellt werden. Auf meinem Blog befinden sich viele nützliche Tipps und Tutorials für Linux und Microsoft Betriebssysteme.