PostgreSQL security levels
PostgreSQL has different security levels defined on PostgreSQL objects, including tablespace, database, schema, table, foreign data wrapper, sequence, domain, language, and large object. One can have a peek into different privileges by running the \h
meta command in psql, as follows:
car_portal=> \h GRANT Command: GRANT Description: define access privileges Syntax: GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] ...
Database security level
To disallow users from connecting to the database by default, one needs to revoke the default database permissions from public, as follows:
$ psql -h localhost -U postgres -d car_portal car_portal=# REVOKE ALL ON DATABASE car_portal FROM public; REVOKE car_portal=# \q $ psql -h localhost -U web_app...