Вопрос по database, sql, postgresql – Как предоставить все права на представления произвольному пользователю

22

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

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

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

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

Ваш Ответ

1   ответ
28

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

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

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

Depending on the type of object, the initial default privileges might include granting some privileges to PUBLIC. The default is no public access for tables, columns, schemas, and tablespaces; CONNECT privilege and TEMP table creation privilege for databases; EXECUTE privilege for functions; and USAGE privilege for languages.

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

GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

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

Grant all on a specific schema in the db to a group role in PostgreSQL

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

How to manage DEFAULT PRIVILEGES for USERs on a DATABASE vs SCHEMA?

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

enter image description here

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

@Cerin: вопрос требуетviewsдля этого вам не нужны привилегии для последовательностей (по крайней мере, на момент написания, когда обновляемые представления еще не были реализованы). Для получения дополнительных привилегий смотрите:stackoverflow.com/questions/24918367/…
Это не дает пользователю разрешения на последовательности. Cerin
@ Marcel: я добавил заметку, чтобы напомнить людям.
Мне потребовался час, чтобы понять, что «GRANT SELECT НА ВСЕХ ТАБЛИЦАХ В SCHEMA public TO myuser;» apos; имеет смысл только тогда, когда эта команда выполняется, когда пользователь, который предоставляетCONNECTED в эту базу данных. Если нет, он просто ничего не делает (или, по крайней мере, не дает пользователю права выбора). В оболочке суперпользователя используйте \ c databasename.

Похожие вопросы