Как создать пользователя только для чтения в PostgreSQL?

Я хочу создать пользователя только для чтения в PostgreSQL.

Намерение состоит в том, чтобы иметь общедоступный проводник данных, где пользователи могут писать собственные SQL-запросы.

Я делаю это, чтобы создать пользователя:

CREATE USER MyReadOnlyUser WITH ENCRYPTED PASSWORD 'MY_WEAK_PASSWORD';

GRANT ALL PRIVILEGES ON DATABASE "MY_DB_NAME" to MyReadOnlyUser;

GRANT ALL ON SCHEMA public TO MyReadOnlyUser; 
GRANT SELECT ON ALL TABLES IN SCHEMA public TO MyReadOnlyUser; 

Намерение состоит в том, чтобы предоставить пользователю SELECT доступ ко всем таблицам, затем отменить доступ select к чувствительным таблицам, и затем пользователь может выполнять пользовательские запросы с этим пользователем БД, без необходимости для меня очищать ввод.

Тем более он не может:

вставка, удаление, усечение, удаление таблицы, удаление базы данных, создание таблицы, создание функции / процедуры, просмотр / выполнение / создание / удаление хранимой процедуры / функций. и т.п.

Ооочень - теперь мой вопрос:
Почему этот пользователь имеет доступ к information_schema?
Ему не был предоставлен доступ ни к каким представлениям, и к схеме information_schema тоже нет...

1 ответ

Решение

Почему этот пользователь имеет доступ к information_schema

Я думаю, что привилегия выбора предоставлена ​​PUBLIC по умолчанию на information_schema.

Вы должны быть в состоянии сделать:

revoke all on all tables in schema information_schema from public;

Вам, вероятно, также необходимо отозвать привилегию выбора для представлений / таблиц в схеме pg_catalog. Но я не уверен, что это сломается, если, например, psql или другие клиентские инструменты не смогут получить доступ к этой информации.

Другие вопросы по тегам