Ja, jetzt hab ich es auch gelesen:
PostgreSQL grants privileges on some types of objects to PUBLIC
by default when the objects are created. No privileges are granted to PUBLIC
by default on tables, table columns, sequences, foreign data wrappers, foreign servers, large objects, schemas, tablespaces, or configuration parameters. For other types of objects, the default privileges granted to PUBLIC
are as follows: CONNECT
and TEMPORARY
(create temporary tables) privileges for databases; EXECUTE
privilege for functions and procedures; and USAGE
privilege for languages and data types (including domains).
Ich bin trotzdem etwas irritiert, weil man diese default Rechte nicht sehen kann.
Ich habe mal 2 Datenbanken, test1 und test2, gleichartig angelegt (Owner “postgres”). Direkt nach der Anlage sehe ich unter “Security” keinerlei “Privileges”.
Hier müssten jetzt also die default Rechte via der PUBLIC Rolle ziehen. Mein User “test”, der nicht Owner der beiden Datenbanken ist, kann sich zu beiden connecten, das passt also.
Wenn ich dann einer Datenbank ein Recht hinzufüge, werden plötzlich auch die Rechte von PUBLIC sichtbar:
postgres=# GRANT CONNECT ON DATABASE test1 to postgres ;
GRANT
Wenn ich jetzt die beiden Zeilen aus “Privilges” der Datenbank “test1” entferne, sehen beide Datenbanken gleich aus, beide zeigen keine “Access privileges”:
Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
-----------±---------±---------±----------------±--------------------±--------------------±-----------±----------±----------------------
test1 | postgres | UTF8 | libc | German_Germany.1252 | German_Germany.1252 | | |
test2 | postgres | UTF8 | libc | German_Germany.1252 | German_Germany.1252 | | |
An der test1 kann sich mein User “test” jetzt aber nicht mehr connecten, an der test2 aber schon, obwohl sie scheinbar die gleichten Berechtigungen gesetzt haben:
➜ ~ psql -h localhost -U test test1
Password for user test:
psql: error: connection to server at “localhost” (127.0.0.1), port 5432 failed: FATAL: keine Berechtigung für Datenbank test1
DETAIL: Benutzer hat das CONNECT-Privileg nicht.
➜ ~ psql -h localhost -U test test2
Password for user test:
psql (16.0 (Debian 16.0-2))
Type “help” for help.
test2=>
Wo sehe ich denn jetzt wohl, dass die “test1” ihre magischen default Rechte via PUBLIC nicht mehr hat, die “test2” aber schon?
Sven