PostgreSQL, oft einfach als Postgres bekannt, ist ein universelles objektrelationales Open-Source-Datenbankverwaltungssystem. PostgreSQL verfügt über viele erweiterte Funktionen wie Online-Backups, Point-in-Time-Recovery, verschachtelte Transaktionen, SQL- und JSON-Abfragen, Multiversion Concurrency Control (MVCC), asynchrone Replikation und mehr.
In diesem Tutorial zeigen wir Ihnen, wie Sie PostgreSQL unter Debian 9 installieren und die Grundlagen der grundlegenden Datenbankverwaltung erkunden.
Voraussetzungen #
Bevor Sie mit diesem Tutorial fortfahren, vergewissern Sie sich, dass der Benutzer, als der Sie angemeldet sind, über sudo-Berechtigungen verfügt.
PostgreSQL wird installiert #
Zum Zeitpunkt der Erstellung dieses Artikels war die neueste Version von PostgreSQL, die in den Debian-Repositories verfügbar ist, PostgreSQL Version 9.6.
Führen Sie die folgenden Schritte aus, um PostgreSQL auf Ihrem Debian-Server zu installieren:
-
Beginnen Sie damit, den lokalen Paketindex zu aktualisieren:
sudo apt update
-
Installieren Sie den PostgreSQL-Server und das PostgreSQL-Contrib-Paket, das zusätzliche Funktionen für die PostgreSQL-Datenbank bereitstellt:
sudo apt install postgresql postgresql-contrib
-
Wenn die Installation abgeschlossen ist, wird der PostgreSQL-Dienst automatisch gestartet. Um die Installation zu überprüfen, stellen wir mithilfe von
psql
eine Verbindung zum PostgreSQL-Datenbankserver her und drucken Sie die Serverversion aus:sudo -u postgres psql -c "SELECT version();"
Die Ausgabe sieht folgendermaßen aus:
version ----------------------------------------------------------------------------------------------------------- PostgreSQL 9.6.10 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit (1 row)
PostgreSQL-Rollen und Authentifizierungsmethoden #
PostgreSQL handhabt Datenbankzugriffsberechtigungen unter Verwendung des Konzepts von Rollen. Eine Rolle kann einen Datenbankbenutzer oder eine Gruppe von Datenbankbenutzern darstellen.
PostgreSQL unterstützt eine Reihe von Authentifizierungsmethoden. Die am häufigsten verwendeten Methoden sind:
- Vertrauen - Mit dieser Methode kann sich die Rolle ohne Passwort verbinden, solange die in der
pg_hba.conf
definierten Kriterien erfüllt werden 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 werdenmd5
undpassword
(Klartext) - Ident - Diese Methode wird nur bei TCP/IP-Verbindungen unterstützt. Funktioniert durch Abrufen des Benutzernamens des Betriebssystems des Clients 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 ist PostgreSQL für lokale Verbindungen auf die Verwendung der Peer-Authentifizierungsmethode eingestellt.
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-Benutzer anzumelden, müssen Sie zuerst zum Benutzer postgres wechseln und können dann mit psql
auf eine PostgreSQL-Eingabeaufforderung zugreifen 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
Sie können das sudo
verwenden Befehl, um auf die PostgreSQL-Eingabeaufforderung zuzugreifen, ohne den Benutzer zu wechseln:
sudo -u postgres psql
Das postgres
Benutzer wird normalerweise nur vom lokalen Host verwendet und es wird empfohlen, das Passwort nicht für diesen Benutzer festzulegen.
PostgreSQL-Rolle und -Datenbank erstellen #
Sie können neue Rollen über die Befehlszeile mit createuser
erstellen Befehl. Nur Superuser und Rollen mit CREATEROLE
Berechtigung kann neue Rollen erstellen.
Im folgenden Beispiel erstellen wir eine neue Rolle mit dem Namen john
eine Datenbank namens johndb
und Berechtigungen für die Datenbank erteilen.
-
Erstellen Sie eine neue PostgreSQL-Rolle
Der folgende Befehl erstellt eine neue Rolle mit dem Namen „john“:
sudo su - postgres -c "createuser john"
-
Erstellen Sie eine neue PostgreSQL-Datenbank
Erstellen Sie mithilfe von
createdb
eine neue Datenbank mit dem Namen „johndb“. Befehl:sudo su - postgres -c "createdb johndb"
-
Berechtigungen erteilen
Um dem
john
Berechtigungen zu erteilen user in der Datenbank, die wir im vorherigen Schritt erstellt haben, verbinden Sie sich mit der PostgreSQL-Shell: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 vim /etc/postgresql/9.6/main/postgresql.conf
/etc/postgresql/9.6/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 mit:
sudo service postgresql restart
Bestätigen Sie die Änderungen mit ss
Dienstprogramm:
ss -nlt | grep 5432
LISTEN 0 128 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 128 [::]:5432 [::]:*
Wie Sie der obigen Ausgabe entnehmen können, lauscht der PostgreSQL-Server auf allen Schnittstellen (0.0.0.0).
Der letzte 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/9.6/main/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD
# The user jane will be able to access all databases from all locations using a md5 password
host all jane 0.0.0.0/0 md5
# The user jane will be able to access only the janedb from all locations using a md5 password
host janedb jane 0.0.0.0/0 md5
# The user jane will be able to access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust