PostgreSQL oder Postgres ist ein universelles objektrelationales Open-Source-Datenbankverwaltungssystem mit vielen erweiterten Funktionen, mit denen Sie fehlertolerante Umgebungen oder komplexe Anwendungen erstellen können.
In diesem Handbuch erklären wir, wie Sie den PostgreSQL-Datenbankserver unter Ubuntu 20.04 installieren, und erkunden die Grundlagen der PostgreSQL-Datenbankverwaltung.
Voraussetzungen #
Um Pakete installieren zu können, müssen Sie als Root oder Benutzer mit sudo-Berechtigungen angemeldet sein.
Installieren Sie PostgreSQL auf Ubuntu #
Zum Zeitpunkt der Erstellung dieses Artikels war die neueste Version von PostgreSQL, die in den offiziellen Ubuntu-Repositories verfügbar ist, PostgreSQL Version 10.4.
Führen Sie die folgenden Befehle aus, um den PostgreSQL-Server auf Ubuntu zu installieren:
sudo apt update
sudo apt install postgresql postgresql-contrib
Wir installieren auch das PostgreSQL-Contrib-Paket, das mehrere zusätzliche Funktionen für das PostgreSQL-Datenbanksystem bereitstellt.
Sobald die Installation abgeschlossen ist, wird der PostgreSQL-Dienst automatisch gestartet. Verwenden Sie das psql
Tool, um die Installation zu überprüfen, indem Sie sich mit dem PostgreSQL-Datenbankserver verbinden und seine Version ausdrucken:
sudo -u postgres psql -c "SELECT version();"
PostgreSQL 12.2 (Ubuntu 12.2-4) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-8ubuntu1) 9.3.0, 64-bit
Das ist es. PostgreSQL wurde installiert und Sie können es verwenden.
PostgreSQL-Rollen und Authentifizierungsmethoden #
Datenbankzugriffsberechtigungen innerhalb von PostgreSQL werden mit dem Rollenkonzept gehandhabt. Eine Rolle kann einen Datenbankbenutzer oder eine Gruppe von Datenbankbenutzern darstellen.
PostgreSQL unterstützt mehrere Authentifizierungsmethoden. Die am häufigsten verwendeten Methoden sind:
- Vertrauen - Eine Rolle kann sich ohne Passwort verbinden, solange die in der
pg_hba.conf
definierten Bedingungen erfüllt sind erfüllt sind. - Passwort – Eine Rolle kann eine Verbindung herstellen, indem sie ein Passwort bereitstellt. Die Passwörter können als
scram-sha-256
gespeichert werden ,md5
, undpassword
(Klartext). - Ident - Wird nur auf TCP/IP-Verbindungen unterstützt. Es funktioniert, indem es den Benutzernamen des Betriebssystems des Clients erhält, mit einer optionalen Benutzernamenzuordnung.
- Peer - Dasselbe wie Ident, wird aber nur bei lokalen Verbindungen unterstützt.
Die PostgreSQL-Clientauthentifizierung wird in der Konfigurationsdatei mit dem Namen pg_hba.conf
definiert . Standardmäßig verwendet PostgreSQL die Peer-Authentifizierungsmethode für lokale Verbindungen.
Das postgres
Benutzer wird automatisch erstellt, wenn Sie PostgreSQL installieren. Dieser Benutzer ist der Superuser für die PostgreSQL-Instanz und entspricht dem MySQL-Root-Benutzer.
Um sich beim PostgreSQL-Server als postgres
anzumelden Benutzer, wechseln Sie zuerst zum Benutzer und greifen Sie dann mit psql
auf die PostgreSQL-Eingabeaufforderung zu Dienstprogramm:
sudo su - postgres
psql
Von hier aus können Sie mit Ihrer PostgreSQL-Instanz interagieren. Um die PostgreSQL-Shell zu verlassen, geben Sie Folgendes ein:
\q
Eine andere Möglichkeit, auf die PostgreSQL-Eingabeaufforderung zuzugreifen, ohne den Benutzer zu wechseln, ist die Verwendung von sudo
Befehl:
sudo -u postgres psql
Im Allgemeinen sollten Sie sich beim Datenbankserver als postgres
anmelden nur vom localhost.
PostgreSQL-Rolle und -Datenbank erstellen #
Nur Superuser und Rollen mit CREATEROLE
Berechtigung kann neue Rollen erstellen.
Das folgende Beispiel zeigt, wie Sie eine neue Rolle mit dem Namen john
erstellen eine Datenbank namens johndb
und gewähren Sie Berechtigungen für die Datenbank:
-
Erstellen Sie eine neue PostgreSQL-Rolle:
sudo su - postgres -c "createuser john"
-
Erstellen Sie eine neue PostgreSQL-Datenbank:
sudo su - postgres -c "createdb johndb"
Um dem Benutzer Berechtigungen für die Datenbank zu erteilen, stellen Sie eine Verbindung zur PostgreSQL-Shell her:
sudo -u postgres psql
und führen Sie die folgende Abfrage aus:
GRANT ALL PRIVILEGES ON DATABASE johndb TO john;
Aktivieren Sie den Fernzugriff auf den PostgreSQL-Server #
Standardmäßig lauscht der PostgreSQL-Server nur auf der lokalen Schnittstelle (127.0.0.1
).
Um den Fernzugriff auf Ihren PostgreSQL-Server zu aktivieren, öffnen Sie die Konfigurationsdatei postgresql.conf
und fügen Sie listen_addresses = '*'
hinzu in CONNECTIONS AND AUTHENTICATION
Abschnitt.
sudo nano /etc/postgresql/12/main/postgresql.conf
/etc/postgresql/12/main/postgresql.conf#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
Speichern Sie die Datei und starten Sie den PostgreSQL-Dienst neu:
sudo service postgresql restart
Bestätigen Sie die Änderungen mit ss
Dienstprogramm:
ss -nlt | grep 5432
Die Ausgabe zeigt, dass der PostgreSQL-Server auf allen Schnittstellen lauscht (0.0.0.0
):
LISTEN 0 244 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 244 [::]:5432 [::]:*
Der nächste Schritt besteht darin, den Server so zu konfigurieren, dass er Remote-Verbindungen akzeptiert, indem Sie die pg_hba.conf
bearbeiten Datei.
Unten sind einige Beispiele, die verschiedene Anwendungsfälle zeigen:
/etc/postgresql/12/main/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD
# The user jane can access all databases from all locations using md5 password
host all jane 0.0.0.0/0 md5
# The user jane can access only the janedb from all locations using md5 password
host janedb jane 0.0.0.0/0 md5
# The user jane can access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust
Der letzte Schritt besteht darin, den Port 5432
zu öffnen in Ihrer Firewall.
Angenommen, Sie verwenden UFW
um Ihre Firewall zu verwalten, und Sie möchten den Zugriff von 192.168.1.0/24
zulassen subnet, würden Sie den folgenden Befehl ausführen:
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5432
Stellen Sie sicher, dass Ihre Firewall so konfiguriert ist, dass sie nur Verbindungen von vertrauenswürdigen IP-Bereichen akzeptiert.