Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Инструкция GRANT советы и хитрости PostgreSQL

Платформа PostgreSQL поддерживает ту часть параметров инструкции GRANT стандарта ANSI, которые относятся к объектным привилегиям, применяемым к объектам базы данных, таким, как таблицы. Эта платформа не поддерживает параметры WITH стандарта ANSI, а также такие специальные возможности, как USAGE и UNDER. Синтаксис инструкции GRANT в PostgreSQL следующий.

GRANT {ALL [PRIVILEGES]

I SELECT

I INSERT

I DELETE

I UPDATE

I RULE

I REFERENCES

I TRIGGERS

| USAGE} [, …]

ON [TABLE] {имя_объекта >[, …]

TO {имя_получателя | GROUP имя_группы | PUBLIC} [, …]

Где:

ALL [PRIVILEGES]

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

{SELECT | INSERT DELETE UPDATE]

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

RULE

Предоставляется право создавать или удалять правило для таблицы или представления.

REFERENCES

Предоставляется право создавать или удалять ограничения типа «внешний ключ», ссылающиеся на объект базы данных как на родительский объект.

TRIGGERS

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

USAGE

Предоставляется право использовать следующие объекты: CHARACTER SET, COLLATION.

TRANSLATION и DOMAIN (пользовательский тип данных).

ON [TABLE] {имя_объекта}

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

ТО {имя_получателя | GROUP имя_группы PUBLIC}

Указывается пользователь или роль или несколько пользователей или ролей, которые получают данную привилегию. В PostgreSQL слово PUBLIC является синонимом для всех пользователей. Система PostgreSQL позволяет назначать права доступа группе (GROUP) (по сути это роль), если она существует и является допустимой.

Можно назначить сразу несколько привилегий, перечислив их через запятую. Не объединяйте привилегию ALL [PRIVILEGES] с другими привилегиями, однако оставшиеся привилегии можно использовать в любых сочетаниях.

Платформа PostgreSQL не поддерживает предложений WITH и прав доступа на уровне столбцов. В настоящее время, если вам нужно реализовать доступ на уровне столбцов, вы должны настроить представление так, чтобы отображались только те столбцы таблицы, которые пользователю можно видеть.

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

Реализация инструкции GRANT в PostgreSQL работает так, как если бы всегда было указано предложение WITH GRANT OPTION. Любой пользователь, получивший привилегию доступа к таблице, может присвоить свою привилегию другим пользователям.

Поддержка инструкции GRANT в PostgreSQL элементарна. В следующем примере роль PUBLIC получает привилегию INSERT в таблице publishers, а пользователи Emily и Dylan получают привилегии SELECT и UPDATE в таблице sales.

GRANT INSERT ON publishers TO PUBLIC;

GRANT SELECT, UPDATE ON sales TO emily, dylan;

Источник