PostgreSQL Security - PGDay · 2019-07-01 · Cybertec: PostgreSQL seit 1999 I Wir bieten Services...
Transcript of PostgreSQL Security - PGDay · 2019-07-01 · Cybertec: PostgreSQL seit 1999 I Wir bieten Services...
Cybertec: PostgreSQL seit 1999
I Wir bieten Services für PostgreSQL und Data ScienceI 24x7 SupportI TrainingI ConsultingI Performance TuningI Clustering
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Cybertec: Weltweite Services
I Büros in . . .I Wiener Neustadt, ÖsterreichI Zürich, SchweizI Tallinn, EstlandI Montevideo, Uruguay
Hans-Jürgen Schönigwww.cybertec-postgresql.com
PostgreSQL Security: Die Layer
I Security auf verschiedenen EbenenI TransportverschlüsselungI User und RechteverwaltungI Datenverschlüsselung
Hans-Jürgen Schönigwww.cybertec-postgresql.com
User und Rechteverwaltung
1. Bind Adressen: listen_addresses in postgresql.conf2. Netzwerkfreigaben: pg_hba.conf3. Instanzebene4. Databaseebene5. Schemaebene6. Tabellenebene7. Spaltenebene8. Row-Level-Security
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Bind Adressen:
I postgresql: listen_addressesI Auf wen wird gehört?
listen_addresses = ’localhost’port = 5432max_connections = 100superuser_reserved_connections = 3
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Netzwerk: pg_hba.conf (1)
I Welche Netzwerke dürfen sich wie einloggen?I Wollen wir SSL oder nicht?I Regeln können definiert werden
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Netzwerk: pg_hba.conf (2)
# TYPE DATABASE USER ADDRESS METHODlocal all all trusthost all all 127.0.0.1/32 trusthost all all ::1/128 trusthost all all 192.168.0.0/16 scram-sha-256host all all 192.168.5.5/32 reject
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Welche Methoden gibt es?
I trustI rejectI md5I passwordI scram-sha-256I gssI sspiI identI peerI pamI ldapI radiusI cert
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Instanzebene (1):
I Manche Dinge leben auf Instanzebene:I User / RollenI Tablespaces
I CREATE USER und CREATE ROLE sind “ident”
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Instanzebene (2):
I Rechte:I CREATEROLE / CREATEUSERI CREATEDBI SUPERUSERI LOGIN / NOLOGINI REPLICATION
Hans-Jürgen Schönigwww.cybertec-postgresql.com
GRANT und REVOKE
I Alle Rechte auf Databases, Schemata, Tabellen undSpalten werden mit GRANT und REVOKE vergeben
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Databaseebene:
I CONNECT:I Eine Instanz hat viele DatenbankI Zu welcher Datenbank darf ich mich verbinden?
I CREATE:I Darf ich Schemata anlegen?I NICHT Database anlegen !
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Schemaebene:
I CREATE:I In einem Schema ein Objekt anlegen (Table, Function, etc.)
I USAGE:I Darf ich den System Catalog sehen?I Benötigt man, um auf Tabellen in einem Schema zugreifen
zu dürfen
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Tabellenebene:
I SELECT, INSERT, UPDATE, DELETE, TRUNCATE,REFERENCES, TRIGGER
I Es gibt keine impliziten Rechte:I INSERT kann ohne SELECT existieren
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Spaltenebene:
I Man kann den Zugriff auf Spalten reduzierenI “SELECT *” klappt möglicherweise nicht mehr
I Man muss Spalten explizit listenI Das kann Applikationen brechen
Hans-Jürgen Schönigwww.cybertec-postgresql.com
PUBLIC: Unix-World style
I “PUBLIC” hat automatisch CONNECT-Rechte auf eineDatabase
I “PUBLIC” hat automatisch CREATE / USAGE Rechte aufdas “public” Schema
I Benutzer können sich anmelden und Tabellen anlegenI Das will man möglicherweise nicht
REVOKE ALL ON DATABASE test FROM public;REVOKE ALL ON SCHEMA public FROM public;
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Automatische Rechtevergabe
I Nehmen wir an, es gibt ein Schema namens “buchhaltung”I In diesem Schema gibt es 100 Tabellen
GRANT SELECT ON ALL TABLES IN SCHEMA buchhaltung TO xy;
I Was passiert, wenn die 101. Tabelle angelegt wird?I “FOR ALL TABLES IN SCHEMA” ist nur eine Schleife
Hans-Jürgen Schönigwww.cybertec-postgresql.com
ALTER DEFAULT PRIVILEGES
Command: ALTER DEFAULT PRIVILEGESDescription: define default access privilegesSyntax:ALTER DEFAULT PRIVILEGES
[ FOR { ROLE | USER } target_role [, ...] ][ IN SCHEMA schema_name [, ...] ]abbreviated_grant_or_revoke
where abbreviated_grant_or_revoke is one of:
GRANT { { SELECT | INSERT | UPDATE | DELETE |TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }ON TABLES ...
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Row-Level-Security (1):
I Manchmal ist es nötig, die Sicht auf die Dateneinzuschränken
I Andere Hersteller nennen das “Virtual Private Database”
I Beispiel:
I User A sieht nur MännerI User B sieht nur FrauenI User C sieht alle Einträge
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Row-Level-Security (2):
test=# \h CREATE POLICYCommand: CREATE POLICYDescription: define a new row level security
policy for a tableSyntax:CREATE POLICY name ON table_name
[ AS { PERMISSIVE | RESTRICTIVE } ][ FOR { ALL | SELECT | INSERT | UPDATE | DELETE } ][ TO { role_name | PUBLIC | CURRENT_USER |SESSION_USER } [, ...] ][ USING ( using_expression ) ][ WITH CHECK ( check_expression ) ]
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Row-Level-Security (3):
test=# CREATE TABLE t_test AS SELECT *FROM generate_series(1, 5) AS id;
SELECT 5test=# ALTER TABLE t_test ENABLE ROW LEVEL SECURITY;ALTER TABLEtest=# CREATE USER joe LOGIN;CREATE ROLEtest=# GRANT ALL ON t_test TO joe;GRANT
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Row-Level-Security (4):
iMac:~ hs$ psql test -U joetest=> SELECT * FROM t_test;id
----(0 rows)
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Row-Level-Security (5):
test=# CREATE POLICY mypol ON t_testFOR SELECT TO joe USING (id < 3);
CREATE POLICYtest=# \q
iMac:~ hs$ psql test -U joe
test=> SELECT * FROM t_test;id
----12
(2 rows)
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Security auf Funktionsebene
test=# \h CREATE FUNCTIONCommand: CREATE FUNCTIONDescription: define a new functionSyntax:CREATE [ OR REPLACE ] FUNCTION name ( ... )...
[ EXTERNAL ] SECURITY INVOKER |[ EXTERNAL ] SECURITY DEFINER
I Läuft die Funktion als Caller oder als “Autor”?
Hans-Jürgen Schönigwww.cybertec-postgresql.com
PostgreSQL TDE
I “Data At Rest Encryption”I Manchmal will man die ganze Instanz verschlüsselnI Der Key wird beim Start der Instanz von einem Modul
“beschafft”I Wir versuchen den Code in PostgreSQL 13 zu bekommen
I Derzeit für ältere Versionen bei uns verfügbar
Hans-Jürgen Schönigwww.cybertec-postgresql.com
Contact us
Cybertec Schönig & Schönig GmbHHans-Jürgen SchönigGröhrmühlgasse 26A-2700 Wiener Neustadt
Email: [email protected]
Follow us on Twitter: @PostgresSupport
Hans-Jürgen Schönigwww.cybertec-postgresql.com