Предоставьте все на определенной схеме в БД для групповой роли в 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;
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