I have an issue while trying to create a readonly user in PostgreSQL.
I want user ckan_default to create tables in database datastore_default. And I want readonlyuser to read tables created by ckan_default in datastore_default. I want this rule to apply to tables that will be created by ckan_default, not only the ones already created.
GRANT CONNECT ON DATABASE datastore_default TO readonlyuser;
GRANT USAGE ON SCHEMA public TO readonlyuser;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonlyuser;
ALTER DEFAULT PRIVILEGES FOR USER readonlyuser IN SCHEMA public GRANT SELECT ON TABLES TO readonlyuser;
acutally the complete script I ran was
sudo -u postgres psql postgres -f /tmp/set_permissions.sql
--content of /tmp/set_permissions.sql
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE USAGE ON SCHEMA public FROM PUBLIC;
GRANT CREATE ON SCHEMA public TO ckan_default;
GRANT USAGE ON SCHEMA public TO ckan_default;
GRANT CREATE ON SCHEMA public TO ckan_default;
GRANT USAGE ON SCHEMA public TO ckan_default;
REVOKE CONNECT ON DATABASE ckan_default FROM readonlyuser;
GRANT CONNECT ON DATABASE datastore_default TO readonlyuser;
GRANT USAGE ON SCHEMA public TO readonlyuser;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonlyuser;
ALTER DEFAULT PRIVILEGES FOR USER ckan_default IN SCHEMA public
GRANT SELECT ON TABLES TO readonlyuser;
I read this post How do you create a read-only user in PostgreSQL and I either tried it or it does not work for tables that will be created.
For more details and the complete script check out the pastebin http://pastebin.com/psDifhwd