Rolle anlegen
CREATE ROLE benutzername;
Rolle mit Datenbankzugang
CREATE ROLE benutzername WITH LOGIN;
Zugangsrecht ändern
ALTER ROLE benutzername WITH LOGIN;
Passwort angeben
CREATE ROLE benutzername WITH PASSWORD 'streng geheim';
Passwort verschlüsselt angeben
echo -n 'streng geheim' | md5sum
CREATE ROLE benutzername WITH ENCRYPTED PASSWORD '01a71ae0707abf41fea27a9e71abec36';
Superuser anlegen
CREATE ROLE admin WITH SUPERUSER;
Rolle darf Datenbanken anlegen
CREATE ROLE benutzer WITH CREATEDB;
Rolle darf andere Rollen anlegen
CREATE ROLE benutzer WITH CREATEROLE;
Rolle als Gruppe
CREATE ROLE benutzer IN ROLE admins;
GRANT
GRANT recht ON objekt TO rolle;
Jedem alle Rechte gewähren
GRANT ALL ON datentabelle TO PUBLIC;
Rechteweitergabe erlauben
GRANT ALL ON datentabelle TO entwickler WITH GRANT OPTION;
Eigentümer eines Objekts ändern
ALTER TABLE datentabelle OWNER TO entwickler;
REVOKE
REVOKE recht ON objekt FROM rolle;
Keine neuen Tabellen im Schema
REVOKE USAGE ON schemaname FROM PUBLIC;
Rechte rekursiv entfernen
REVOKE recht ON objekt FROM rolle CASCADE;
Rechte anzeigen
\x
Rechte anzeigen
\dp test
Rechte ändern
GRANT ALL ON test TO PUBLIC;
\dp test
Tabelle erstellen
CREATE TABLE spaltenbasiert ( id SERIAL PRIMARY KEY, daten TEXT );
INSERT INTO spaltenbasiert (daten) VALUES ('23'), ('42');
Zugriffsrechte anpassen
REVOKE ALL ON spaltenbasiert FROM PUBLIC;
GRANT SELECT (daten) ON spaltenbasiert TO PUBLIC;
Zugriffsrechte anzeigen
dp spaltenbasiert
Neuen Benutzer erstellen und anwenden
CREATE ROLE anwender;
SET SESSION AUTHORIZATION 'anwender';
SELECT SESSION_USER, CURRENT_USER;
Daten auslesen
SELECT id, daten FROM spaltenbasiert;
SELECT daten FROM spaltenbasiert;
Tabelle und View erstellen
CREATE TABLE zeilenbasiert ( id INTEGER PRIMARY KEY, daten TEXT );
CREATE VIEW zeilenbasiert_view AS SELECT id, daten FROM zeilenbasiert WHERE id < 100;
Zugriffsrechte anpassen
REVOKE ALL ON zeilenbasiert FROM PUBLIC;
GRANT SELECT ON zeilenbasiert_view TO PUBLIC;
Serverseitige Funktion erstellen
CREATE FUNCTION zeilenbasiert_func (id OUT, daten OUT) RETURNS SETOF record AS $$ SELECT id, daten FROM zeilenbasiert WHERE id < 100; $$ LANGUAGE SQL;
Zugriffsrechte anpassen
REVOKE ALL ON zeilenbasiert FROM PUBLIC;
GRANT EXECUTE ON zeilenbasiert_func TO PUBLIC;
Zugang von localhost
local test ads trust host test ads 127.0.0.1/32 trust
Zugang zu verschiedenen Datenbanken
local test ads trust local samerole ads trust
Verschiedene Benutzernamen
local postgres +admins trust
Netzwerkadressen angeben
host test +admins 192.168.0.0/24 md5 host test +admins fe80::c0a8:0/120 md5 host test ads 0/0 md5
Beispiele
host test ads 192.168.0.0/24 md5 local test ads ident sameuser
LOGIN Privileg gewähren
ALTER ROLE ads WITH LOGIN;
LOGIN Privileg entziehen
ALTER ROLE ads WITH NOLOGIN;
sameuser in pg_hba.conf verwenden
local sameuser all ident sameuser
sameuser in pg_hba.conf
dbadmins andreas ads dbadmins pascal pascal
Eigenes Mapping
local sameuser all ident dbadmins
Regulärer Ausdruck
beispiel /(.*)@example.com \1