Как предоставить все привилегии на представления произвольному пользователю
как вы предоставляете доступ для чтения/выбора для всех функций и представлений произвольному пользователю?
я использую 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 попробуйте имеет функцию для более сложных массовых операций:
или можно запросить системные каталоги для создания инструкций DDL для массового предоставления / отзыва ...