PostgreSQL Security - PGDay · 2019-07-01 · Cybertec: PostgreSQL seit 1999 I Wir bieten Services...

32
PostgreSQL Security Hans-Jürgen Schönig www.cybertec-postgresql.com

Transcript of PostgreSQL Security - PGDay · 2019-07-01 · Cybertec: PostgreSQL seit 1999 I Wir bieten Services...

PostgreSQL Security

Hans-Jürgen Schönigwww.cybertec-postgresql.com

Über Cybertec

Hans-Jürgen Schönigwww.cybertec-postgresql.com

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: Überblick

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

Default Rechte und automatische Vergabe

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

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

Any questions?

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