Определяет права доступа.
GRANT { {SELECT | INSERT | UPDATE | DELETE | REFERENCES |
TRIGGER | TRUNCATE } [, ...] | ALL [PRIVILEGES] }
ON { [TABLE] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC} [, ...] [ WITH GRANT OPTION ]
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
ON [ TABLE ] table_name [, ...]
TO { role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { {USAGE | SELECT | UPDATE} [, ...] | ALL [PRIVILEGES] }
ON { SEQUENCE sequence_name [, ...]
| ALL SEQUENCES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { {CREATE | CONNECT | TEMPORARY | TEMP} [, ...] | ALL
[PRIVILEGES] }
ON DATABASE database_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON DOMAIN domain_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN DATA WRAPPER fdw_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN SERVER server_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [PRIVILEGES] }
ON { FUNCTION function_name ( [ [ argmode ] [ argname ] argtype [, ...]
] ) [, ...]
| ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [PRIVILEGES] }
ON LANGUAGE lang_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { CREATE | USAGE } [, ...] | ALL [PRIVILEGES] }
ON SCHEMA schema_name [, ...]
TO { [ GROUP ] role_name | PUBLIC} [, ...] [ WITH GRANT OPTION ]
GRANT { CREATE | ALL [PRIVILEGES] }
ON TABLESPACE tablespace_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON TYPE type_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT parent_role [, ...]
TO member_role [, ...] [WITH ADMIN OPTION]
GRANT { SELECT | INSERT | ALL [PRIVILEGES] }
ON PROTOCOL protocolname
TO username
В базе данных YMatrix концепции пользователей и групп объединены в сущность, называемую ролями. Поэтому не требуется использовать ключевое слово GROUP для указания того, является ли получатель прав пользователем или группой. Ключевое слово GROUP по-прежнему допускается в команде, но оно является избыточным.
Команда GRANT имеет две основные формы: одна предоставляет привилегии на объекты базы данных (таблицы, столбцы, представления, внешние таблицы, последовательности, базы данных, внешние обёртки данных, внешние серверы, функции, процедурные языки, схемы или табличные пространства), а другая — членство в роли.
Эта форма команды GRANT предоставляет определённую привилегию на объект базы данных одной или нескольким ролям. Эти привилегии будут добавлены к уже предоставленным, если таковые имеются.
Также существует возможность предоставить привилегии всем объектам одного типа в одной или нескольких схемах. В настоящее время эту функциональность поддерживают только таблицы, последовательности и функции (но обратите внимание, что ALL TABLES считается включающим представления и внешние таблицы).
Ключевое слово PUBLIC означает, что привилегии предоставляются всем ролям, включая те, которые могут быть созданы позже. PUBLIC можно рассматривать как неявно определённую роль уровня группы, которая всегда содержит все роли. Конкретная роль будет иметь сумму привилегий, предоставленных ей напрямую, привилегий, предоставленных ролям, в которых она состоит, и привилегий, предоставленных PUBLIC.
Если указан параметр WITH GRANT OPTION, получатели привилегий могут в свою очередь предоставлять их другим. Без опции передачи получатель не сможет этого сделать. Опция передачи не может быть предоставлена PUBLIC.
Нет необходимости предоставлять привилегии владельцу объекта (обычно это роль, создавшая объект), поскольку владелец по умолчанию имеет все привилегии. (Однако владелец может отозвать некоторые свои привилегии по соображениям безопасности.)
Право на удаление объекта или изменение его определения любым способом не считается предоставляемой привилегией; оно присуще владельцу и не может быть предоставлено или отозвано. (Однако аналогичный эффект можно достичь, предоставляя или отзывая членство в роли, которой принадлежит объект; см. ниже.) Владелец также неявно владеет всеми опциями передачи для данного объекта.
База данных YMatrix предоставляет определённые типы объектов по умолчанию привилегии PUBLIC. По умолчанию привилегии на таблицы, столбцы таблиц, последовательности, внешние обёртки данных, внешние серверы, большие объекты, схемы или табличные пространства не предоставляются PUBLIC. Для других типов объектов привилегии по умолчанию, предоставляемые PUBLIC, следующие:
Разумеется, владельцы объектов могут выполнить REVOKE для стандартных и явно предоставленных привилегий. (Для максимальной безопасности выполняйте REVOKE в той же транзакции, где был создан объект; таким образом, исключается временной интервал, когда другие пользователи могут воспользоваться объектом.)
Эта форма команды GRANT предоставляет членство в роли одной или нескольким другим ролям. Членство в роли важно, потому что оно может передавать привилегии, предоставленные роли, каждому её участнику.
Если указан параметр WITH ADMIN OPTION, участники могут в свою очередь предоставлять членство другим или отзывать членство из этой роли. Без опции администратора обычный пользователь не сможет этого сделать. Роль не считается имеющей WITH ADMIN OPTION сама по себе, но она может предоставлять или отзывать членство в сеансе базы данных, где пользователь сеанса совпадает с ролью. Суперпользователь базы данных может предоставлять или отзывать членство в любой роли для любого пользователя. Роль с привилегией CREATEROLE может предоставлять или отзывать членство для любой роли, не являющейся суперпользователем.
В отличие от случаев с привилегиями, членство в роли нельзя предоставить PUBLIC.
Вы также можете использовать команду GRANT для указания, какие пользователи могут обращаться к доверенным протоколам. (Если протокол не является доверенным, вы не можете предоставить другим пользователям разрешение на использование его для чтения или записи данных.)
Чтобы разрешить пользователям создавать внешние таблицы для чтения с использованием доверенных протоколов:
GRANT SELECT ON PROTOCOL protocolname TO username
Чтобы разрешить пользователям создавать внешние таблицы для записи с использованием доверенных протоколов:
GRANT INSERT ON PROTOCOL protocolname TO username
Чтобы разрешить пользователям создавать внешние таблицы для чтения и записи с использованием доверенных протоколов:
GRANT ALL ON PROTOCOL protocolname TO username
Вы также можете использовать эту команду для предоставления пользователям разрешения на создание и использование внешних таблиц s3 и pxf. Однако внешние таблицы типов http, https, gpfdist и gpfdists реализованы внутри базы данных YMatrix, а не как пользовательские протоколы. Для этих типов используйте команду CREATE ROLE или ALTER ROLE, чтобы установить атрибут CREATEEXTTABLE или NOCREATEEXTTABLE для каждого пользователя.
SELECT
INSERT
UPDATE
DELETE
REFERENCES
TRIGGER
TRUNCATE
CREATE
CONNECT
TEMPORARY
TEMP
EXECUTE
USAGE
ALL PRIVILEGES
PUBLIC
WITH GRANT OPTION
WITH ADMIN OPTION
Если пользователь имеет привилегию для конкретного столбца или всей таблицы, он может выполнять операции SELECT, INSERT и другие над этим столбцом. Предоставление привилегий на уровне таблицы, а затем их отзыв на уровне столбца работает не так, как можно было бы ожидать: привилегии на уровне таблицы не затрагиваются операциями на уровне столбца.
Суперпользователи базы данных имеют доступ ко всем объектам независимо от настроек привилегий объектов. Одно исключение — объекты представлений. Доступ к таблицам, на которые ссылается представление, определяется правами владельца представления (а не текущего пользователя, даже если текущий пользователь является суперпользователем).
Если суперпользователь выполняет команду GRANT или REVOKE, команда выполняется так, будто её выполнил владелец затронутого объекта. В частности, привилегии, предоставленные такой командой, будут отображаться как предоставленные владельцем объекта. Для членства в ролях членство будет отображаться как предоставленное ролью, содержащей его.
GRANT и REVOKE могут выполняться не только владельцем затронутого объекта, но и требуют, чтобы исполнитель был членом роли, владеющей объектом, или членом роли, владеющей привилегией WITH GRANT OPTION для объекта. В этом случае привилегия будет записана как предоставленная ролью, фактически владеющей объектом или имеющей привилегию WITH GRANT OPTION.
Предоставление прав на таблицу не распространяется автоматически на последовательности, используемые таблицей, включая привязанные к столбцам SERIAL. Права на последовательность должны быть установлены отдельно.
Команда GRANT не может использоваться для установки привилегий для протоколов файлов, gpfdist или gpfdists. Эти протоколы реализованы внутри базы данных YMatrix. Вместо этого используйте команду CREATE ROLE или ALTER ROLE для установки свойства CREATEEXTTABLE роли.
Используйте метакоманду \dp в psql для получения информации о существующих привилегиях для таблиц и столбцов. Вы также можете использовать другие метакоманды \d для отображения привилегий для объектов, не являющихся таблицами.
Предоставить права на вставку всем ролям для таблицы mytable:
GRANT INSERT ON mytable TO PUBLIC;
Предоставить все доступные привилегии ролям sally в представлении topten. Обратите внимание, что если вышеуказанная команда действительно выполняется суперпользователем или владельцем topten, будут предоставлены все привилегии, а при выполнении другими пользователями — только те привилегии, которыми они обладают с опцией передачи.
GRANT ALL PRIVILEGES ON topten TO sally;
Предоставить членство в роли admins пользователю joe:
GRANT admins TO joe;
Ключевое слово PRIVILEGES требуется в стандарте SQL, но является необязательным в базе данных YMatrix. Стандарт SQL не поддерживает установку привилегий на несколько объектов за одну команду.
База данных YMatrix позволяет владельцам объектов отзывать свои обычные привилегии: например, владелец таблицы может сделать таблицу доступной только для чтения, отозвав у себя привилегии INSERT, UPDATE, DELETE и TRUNCATE. Согласно стандарту SQL, это невозможно. База данных YMatrix рассматривает привилегии владельца как предоставленные ему самим собой; поэтому он может их и отозвать. В стандарте SQL привилегии владельца предоставляются предполагаемой системной сущностью.
Стандарт SQL предусматривает привилегию USAGE для других типов объектов: наборы символов, правила сортировки, преобразования.
В стандарте SQL последовательности имеют только привилегию USAGE, которая контролирует использование выражений NEXT VALUE FOR, эквивалентных функции nextval в базе данных YMatrix. Привилегии SELECT и UPDATE для последовательностей являются расширением YMatrix. Применение привилегии USAGE для последовательностей к функции currval также является расширением YMatrix (как и сама функция).
Привилегии для баз данных, табличных пространств, схем и языков являются расширениями базы данных YMatrix.