Как создать пользователя только для чтения в 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 или другие клиентские инструменты не смогут получить доступ к этой информации.