Предоставьте все на определенной схеме в БД для групповой роли в PostgreSQL



используя PostgreSQL 9.0, у меня есть групповая роль под названием "персонал" и я хотел бы предоставить все (или некоторые) привилегии этой роли в таблицах в определенной схеме. Ни одна из следующих работ



GRANT ALL ON SCHEMA foo TO staff;
GRANT ALL ON DATABASE mydb TO staff;


члены " персонала "по-прежнему не могут выбрать или обновить отдельные таблицы в схеме" foo " или (в случае второй команды) в любую таблицу в базе данных если Я даю все на этой конкретной таблице.



что я могу сделать, чтобы мой и мой жизнь пользователей проще?



обновление: понял это с помощью аналогичный вопрос serverfault.com.



GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO staff;
1020   2  

2 ответов:

вы нашли стенографию, чтобы установить привилегии для всех существующей таблицы в данной схеме. руководство уточняет:

(но обратите внимание, что ALL TABLES подразумевает вид и внешняя таблицы).

жирным выделено мной. serial столбцы реализуются с помощью nextval() на последовательности как столбец по умолчанию и,со ссылкой на руководство:

для последовательностей, эта привилегия позволяет использовать currval и nextval функции.

так что если есть serial столбцы, вы также хотите предоставить USAGE (или ALL PRIVILEGES) on последовательности

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

Примечание: столбцы идентификаторов в Postgres 10 или более поздней версии используйте неявные последовательности, которые не требуют дополнительных привилегий. (Подумайте об обновлении serial столбцы.)

а как же новая объекты?

вы также будете заинтересованы в DEFAULT PRIVILEGES для пользователей или схемы:

ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE          ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;

это устанавливает привилегии для объектов, созданных в будущем автоматически-но не для ранее существующих объектов.

привилегии по умолчанию:только применяется к объектам, созданным целевым пользователем (FOR ROLE my_creating_role). Если это предложение опущено, оно по умолчанию текущий пользователь выполняет ALTER DEFAULT PRIVILEGES. Чтобы быть явным:

ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;

обратите внимание также, что все версии pgAdmin III имеют тонкий баг и дисплей привилегии по умолчанию в области SQL, даже если они не применяются к текущей роли. Будьте уверены, чтобы отрегулировать FOR ROLE предложение вручную при копировании сценария SQL.

мой ответ похож на этот включен ServerFault.com.

Консервативно

если вы хотите быть более консервативным, чем предоставление "всех привилегий", вы можете попробовать что-то вроде этого.

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;

использование public там указано имя схемы по умолчанию, созданной для каждой новой базы данных/каталога. Если вы создали схему, замените ее своим именем.

доступ к схемы

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

вы не заметите это требование при первом использовании Postgres. По умолчанию каждая база данных имеет первую схему с именем public. И каждому пользователю по умолчанию автоматически были предоставлены права "использования" для этой конкретной схемы. При добавлении дополнительной схемы необходимо явно разрешить использование права.

GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;

фрагмент Postgres doc:

для схем разрешает доступ к объектам, содержащимся в указанной схеме (при условии, что также выполняются собственные требования к привилегиям объектов). По существу, это позволяет получателю гранта "искать" объекты в схеме. Без этого разрешения все еще можно увидеть имена объектов, например, путем запроса системных таблиц. Кроме того, после отзыва этого разрешения существующие бэкэнды возможно, есть операторы, которые ранее выполняли этот поиск, поэтому это не полностью безопасный способ предотвращения доступа к объекту.

для более подробного обсуждения см. Вопрос,что грант использование на схеме точно делать?. Обратите особое внимание на ответ by Postgres expert Крейг Рингер.

Существующие Объекты Против Будущего

эти команды влияют только на существующие объекты. Столы и такие, которые вы создаете в будущее получает привилегии по умолчанию, пока вы не выполните эти строки выше. Смотрите другой ответ Эрвина Брандштеттера чтобы изменить значения по умолчанию, тем самым влияя на будущие объекты.

Comments

    Ничего не найдено.