Nur damit ich nicht immer wieder nachschlagen muss (oder, was wahrscheinlicher ist, einen Teil vergesse)
So wird in PostgreSQL ein universeller Read-Only-Nutzer richtig angelegt:
CREATE ROLE nutzer LOGIN PASSWORD 'passwort' NOINHERIT; GRANT CONNECT ON DATABASE datenbank TO nutzer; \c datenbank; -- Zugriffe auf existierende Objekte GRANT USAGE ON SCHEMA public TO nutzer; GRANT SELECT ON ALL TABLES IN SCHEMA public TO nutzer; GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO nutzer; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO nutzer; -- Zugriffe auf zukünftige Objekte ALTER DEFAULT PRIVILEGES FOR ROLE dbowner IN SCHEMA public GRANT SELECT ON TABLES TO nutzer; ALTER DEFAULT PRIVILEGES FOR ROLE dbowner IN SCHEMA public GRANT SELECT ON SEQUENCES TO nutzer; ALTER DEFAULT PRIVILEGES FOR ROLE dbowner IN SCHEMA public GRANT EXECUTE ON FUNCTIONS TO nutzer;