Как предоставить все привилегии на представления произвольному пользователю

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

я использую psql --user=postgres -d mydb -f myview.sql для создания нескольких функций и представлений, а затем я запускаю:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

получив все привилегии, я ожидал бы myuser теперь иметь доступ к функциям и представлениям, созданным postgres пользователей. Однако, когда я пытаюсь получить к ним доступ с myuser, Я получаю " разрешение отказано в связи..." ошибка. Почему так?

1 ответов


причина в том, что вам нужны дополнительные привилегии для доступа к представления или таблицы. Привилегии базы данных не охватывают доступ ко всем объектам в ней.

это отличается с функциями:EXECUTE льгота предоставляется public по умолчанию. но функция выполняется с привилегиями текущего пользователя. Вы можете быть заинтересованы в SECURITY DEFINER модификатор для CREATE FUNCTION. Но обычно этого достаточно, чтобы предоставить SELECT на участие таблицы.

в документации о льготах по умолчанию:

в зависимости от типа объекта начальные привилегии по умолчанию могут включите предоставление некоторых привилегий PUBLIC. По умолчанию нет публичных доступ к таблицам, столбцам, схемам и табличным пространствам;CONNECT привилегия и TEMP привилегия создания таблиц для баз данных;EXECUTE привилегия для функций; и USAGE привилегии для языки.

вас может заинтересовать эта команда DDL (требуется Postgres 9.0 или позже):

GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

при подключении к соответствующей базе данных, конечно (см. @Марселя ниже), а как пользователь с достаточными привилегиями. Вас также может заинтересовать настройка DEFAULT PRIVILEGES:

более подробный ответ как управлять привилегиями:

pgAdmin попробуйте имеет функцию для более сложных массовых операций:

enter image description here

или можно запросить системные каталоги для создания инструкций DDL для массового предоставления / отзыва ...