Я только начал возиться с PostgreSQL, но не улавливаю очень важных тонкостей.
Есть у меня в базе данных несколько таблиц, в которые добавляются данные допустим супер-юзером. И я хочу создать пользователя guest который может их читать данные только из одной таблицы data, то есть делать SELECT из этой таблицы и больше ничего.
Что я делаю сейчас.
-- создание пользователя guest
CREATE USER guest WITH PASSWORD '1234' NOCREATEDB NOCREATEUSER;
-- отбираем права на всё у пользователя guest
REVOKE ALL PRIVILEGES ON DATABASE database FROM guest;
-- добавляем возможность запроса данных из таблиц data
GRANT SELECT ON data TO guest;
-- добавляем возможность подключения к базе данных ascro пользователя guest
GRANT CONNECT ON DATABASE database TO guest;
После этого захожу пользователем guest и SELECT на таблицу data, работает, а на остальные мои таблицы не работает. Вроде всё как надо. НО оказывается что этот guest по прежнему может делать запросы типа
SELECT * FROM pg_tables; и т д
или
CREATE TABLE table (number int);
Как мне лишить его этих возможности?
Почитайть документацию,
Почитайть документацию, конечно.
http://postgresql.ru.net/manual/privileges.html
http://postgresql.ru.net/manual/sql-grant.html
http://postgresql.ru.net/manual/sql-revoke.html
http://postgresql.ru.net/manual/ddl-schemas.html
http://postgresql.ru.net/manual/ddl-schemas.html#DDL-SCHEMAS-CATALOG
После чего попробовать выполнить то, что там написано.
Не вникая в суть вашего дела, навскидку могу предположить, что не отозваны права на схему public и схему pg_catalog