Einführung
In diesem Lab werden Sie die Verwaltung von PostgreSQL-Rollen und -Berechtigungen erkunden. Das Hauptziel ist es, zu lernen, wie man Rollen mit spezifischen Attributen erstellt und Datenbankprivilegien verwaltet.
Sie beginnen mit der Erstellung einer Rolle namens reporting_role mit dem Attribut NOLOGIN, das verhindert, dass sie sich direkt mit der Datenbank verbinden kann. Anschließend überprüfen Sie die Erstellung der Rolle. Nachfolgende Schritte umfassen das Gewähren und Testen von Datenbankprivilegien, das Wechseln von Benutzern zur Überprüfung des Zugriffs und das Entziehen von Privilegien von einer Rolle.
Rolle erstellen
In diesem Schritt lernen Sie, wie Sie eine Rolle in PostgreSQL erstellen. Rollen werden zur Verwaltung von Datenbankzugriffen und Berechtigungen verwendet.
Verbindung zum PostgreSQL-Server herstellen:
Öffnen Sie ein Terminal und verbinden Sie sich mit dem PostgreSQL-Server über das
psql-Kommandozeilen-Tool alspostgres-Benutzer.sudo -u postgres psqlSie sollten eine Eingabeaufforderung sehen, die ähnlich wie folgt aussieht:
postgres=#Die Rolle
reporting_roleerstellen:Nun erstellen wir die
reporting_rolemit dem BefehlCREATE ROLE. Wir geben das AttributNOLOGINan, was bedeutet, dass diese Rolle nicht zur direkten Verbindung mit der Datenbank verwendet werden kann. Sie wird nur zum Gewähren von Berechtigungen an andere Rollen oder Benutzer verwendet.CREATE ROLE reporting_role NOLOGIN;Dieser Befehl erstellt die Rolle. Sie sollten die folgende Ausgabe sehen:
CREATE ROLEDie Erstellung der Rolle überprüfen:
Um zu überprüfen, ob die Rolle erstellt wurde, können Sie den Befehl
\du(kurz für\list users) verwenden. Dieser Befehl listet alle Rollen in der Datenbank auf.\duSie sollten
reporting_rolein der Liste der Rollen sehen. Die Ausgabe wird ungefähr so aussehen:List of roles Role name | Attributes | Member of ----------------+------------------------------------------------------------+----------- labex | Superuser | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} reporting_role | Cannot login | {}Verlassen Sie die psql-Shell.
\q
Datenbankberechtigungen gewähren
In diesem Schritt lernen Sie, wie Sie einer Rolle Datenbankprivilegien gewähren. Wir bauen auf der im vorherigen Schritt erstellten reporting_role auf.
Verbindung zum PostgreSQL-Server herstellen:
Verbinden Sie sich mit dem PostgreSQL-Server über das
psql-Kommandozeilen-Tool alspostgres-Benutzer.sudo -u postgres psqlEine Datenbank erstellen:
Erstellen wir eine Datenbank namens
reporting_db, auf die unserereporting_roleZugriff haben wird.CREATE DATABASE reporting_db;Sie sollten die folgende Ausgabe sehen:
CREATE DATABASEVerbindung zur Datenbank
reporting_dbherstellen:Verbinden Sie sich mit der neu erstellten Datenbank:
\c reporting_dbDie Eingabeaufforderung sollte sich zu
reporting_db=#ändern.Eine Tabelle erstellen:
Erstellen wir eine einfache Tabelle namens
sales_datainnerhalb der Datenbankreporting_db.CREATE TABLE sales_data ( id SERIAL PRIMARY KEY, product VARCHAR(255), amount DECIMAL );Sie sollten die folgende Ausgabe sehen:
CREATE TABLEDer Rolle
reporting_roledieSELECT-Berechtigung für die Tabellesales_datagewähren:Nun gewähren wir der
reporting_roledieSELECT-Berechtigung für die Tabellesales_data. Dies ermöglicht jeder Rolle oder jedem Benutzer, der Mitglied derreporting_roleist, Daten aus der Tabellesales_datazu lesen.GRANT SELECT ON sales_data TO reporting_role;Sie sollten die folgende Ausgabe sehen:
GRANTVerlassen Sie die psql-Shell.
\q
Benutzer erstellen und Berechtigungen testen
In diesem Schritt erstellen Sie einen Benutzer und gewähren ihm die Mitgliedschaft in der reporting_role, um die Privilegien zu testen.
Verbindung zum PostgreSQL-Server herstellen:
Verbinden Sie sich mit dem PostgreSQL-Server über das
psql-Kommandozeilen-Tool alspostgres-Benutzer.sudo -u postgres psqlVerbindung zur Datenbank
reporting_dbherstellen:Verbinden Sie sich mit der Datenbank
reporting_db:\c reporting_dbEinen Benutzer erstellen und die Mitgliedschaft zur
reporting_rolegewähren:Erstellen wir einen neuen Benutzer namens
report_user. Anschließend gewähren wir diesem Benutzer die Mitgliedschaft in derreporting_role. Das bedeutet, dassreport_userdie Privilegien erbt, die derreporting_rolegewährt wurden.CREATE USER report_user; GRANT reporting_role TO report_user;Sie sollten die folgende Ausgabe sehen:
CREATE ROLE GRANT ROLEPostgreSQL für passwortlose Authentifizierung konfigurieren:
Standardmäßig verwendet PostgreSQL die
peer-Authentifizierung, was in diesem Lab zu Verbindungsproblemen führen kann. Wir ändern sie zutrust, um den Zugriff für denreport_userzu vereinfachen.Beenden Sie zuerst die
psql-Shell:\qÄndern Sie nun die Datei
pg_hba.conf, um die Authentifizierungsmethode zu ändern. Der untenstehendesed-Befehl sichert die Originaldatei alspg_hba.conf.bakund ersetztpeerdurchtrustfür lokale Verbindungen.sudo sed -i.bak 's/^local\s\+all\s\+all\s\+peer/local all all trust/' /etc/postgresql/14/main/pg_hba.confLaden Sie PostgreSQL neu, um die Änderungen anzuwenden:
sudo service postgresql reloadDaten in die Tabelle
sales_dataeinfügen:Verbinden Sie sich erneut als
postgres-Benutzer mit der Datenbank.sudo -u postgres psql -d reporting_dbFügen Sie einige Beispieldaten in die Tabelle
sales_datazu Testzwecken ein.INSERT INTO sales_data (product, amount) VALUES ('Laptop', 1200.00), ('Mouse', 25.00), ('Keyboard', 75.00);Sie sollten die folgende Ausgabe sehen:
INSERT 0 3Verlassen Sie die psql-Shell.
\qVerbindung zur Datenbank
reporting_dbalsreport_userherstellen:Öffnen Sie ein neues Terminalfenster und verwenden Sie den folgenden Befehl:
psql -d reporting_db -U report_userSie werden ohne Passwortabfrage als
report_usermit der Datenbank verbunden.Privilegien testen:
Versuchen Sie nun, Daten aus der Tabelle
sales_dataauszuwählen:SELECT * FROM sales_data;Sie sollten die von Ihnen eingefügten Daten sehen:
id | product | amount ----+----------+-------- 1 | Laptop | 1200.00 2 | Mouse | 25.00 3 | Keyboard | 75.00 (3 rows)Wenn Sie diese Ausgabe sehen, bedeutet dies, dass der
report_userdieSELECT-Berechtigung für die Tabellesales_databesitzt, die über diereporting_rolegewährt wurde.Verlassen Sie die psql-Shell.
\q
Berechtigungen entziehen
In diesem Schritt entziehen Sie der reporting_role die SELECT-Berechtigung und überprüfen, ob der report_user keinen Zugriff mehr auf die Tabelle sales_data hat.
Verbindung zum PostgreSQL-Server als
postgres-Benutzer herstellen:Wechseln Sie zurück zum Terminal, in dem Sie als
postgres-Benutzer verbunden sind. Verbinden Sie sich mit dem PostgreSQL-Server über daspsql-Kommandozeilen-Tool alspostgres-Benutzer.sudo -u postgres psqlVerbindung zur Datenbank
reporting_dbherstellen:Verbinden Sie sich mit der Datenbank
reporting_db:\c reporting_dbDer
reporting_roledieSELECT-Berechtigung entziehen:Nun entziehen wir der
reporting_roledieSELECT-Berechtigung für die Tabellesales_data.REVOKE SELECT ON sales_data FROM reporting_role;Sie sollten die folgende Ausgabe sehen:
REVOKEVerlassen Sie die psql-Shell.
\qVerbindung zur Datenbank
reporting_dbalsreport_userherstellen:Wechseln Sie zurück zum Terminal, in dem Sie als
report_userverbunden sind.psql -d reporting_db -U report_userZugriffsverweigerung als
report_userüberprüfen:Führen Sie als
report_userdieSELECT-Abfrage erneut aus, um zu überprüfen, ob Sie keinen Zugriff mehr auf die Daten in der Tabellesales_datahaben:SELECT * FROM sales_data;Sie sollten eine Fehlermeldung ähnlich der folgenden sehen:
ERROR: permission denied for table sales_dataDies bestätigt, dass der
report_userkeineSELECT-Berechtigungen mehr für die Tabellesales_databesitzt, da die Berechtigung von derreporting_roleentzogen wurde.Verlassen Sie die psql-Shell.
\q
Zusammenfassung
In diesem Lab haben Sie gelernt, wie man Rollen erstellt, Berechtigungen gewährt, Benutzer erstellt, Rollen Benutzern zuweist und Berechtigungen in PostgreSQL entzieht. Dies sind grundlegende Konzepte für die Verwaltung von Datenbanksicherheit und Zugriffskontrolle.


