Доступ на чтение можно предоставить через создание специального read-only пользователя. Если пользователю предоставить только право ПОДКЛЮЧЕНИЯ (CONNECT) к базе данных, то подключиться то он сможет, но толку от этого не будет никакого. Поэтому, дополнительно необходимо дать право на ИСПОЛЬЗОВАНИЕ (USAGE) в пространствах имен (схемах) и право на ВЫБОРКИ (SELECT) в таблицах/представлениях как по отдельности, так и ко всем. Всё нижесказанное работает на PostgreSQL 9.0 и выше. Предполагается, что все действия выполняются в plsql под суперпользователем postgres. Итак, поехали: создадим пользователя myuser и предоставим ему доступ только на чтение к таблицам БД mydb. Создание пользователя и общие настройки -- Создаём роль (пользователя):
CREATE ROLE myuser LOGIN ENCRYPTED PASSWORD 'mypass';
-- Предоставляем право подключения к нужной БД:
GRANT CONNECT ON DATABASE mydb TO myuser;
-- Далее, переключаемся на mydb в psql: \c mydb
-- Предоставляем право использования схемы public:
GRANT USAGE ON