Как предоставить все права на представления произвольному пользователю
Как вы предоставляете доступ на чтение / выбор для всех функций и представлений произвольному пользователю?
я использую 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;
Конечно, когда он подключен к рассматриваемой базе данных (см . Комментарий @marcel ниже) и как пользователь с достаточными привилегиями. Вы также можете быть заинтересованы в настройке DEFAULT PRIVILEGES
:
Более подробный ответ, как управлять привилегиями:
В pgAdmin есть функция для более сложных массовых операций:
Или вы можете запросить системные каталоги для создания операторов DDL для массового предоставления / отзыва...