FirebirdSQL logo

GRANT

Назначение

Предоставление привилегий или назначение ролей.

Доступно в

DSQL

Синтаксис (предоставление привилегий)
GRANT <privileges>
  TO <grantee_list>
  [WITH GRANT OPTION]
  [{GRANTED BY | AS} [USER] grantor]

<privileges> ::=
    <table_privileges> | <execute_privilege>
  | <usage_privilege>  | <ddl_privileges>
  | <db_ddl_privilege>

<table_privileges> ::=
  {ALL [PRIVILEGES] | <table_privilege_list> }
    ON [TABLE] {table_name | view_name}

<table_privilege_list> ::=
  <table_privilege> [, <tableprivilege> ...]

<table_privilege> ::=
    SELECT | DELETE | INSERT
  | UPDATE [(col [, col ...])]
  | REFERENCES [(col [, col ...)]

<execute_privilege> ::= EXECUTE ON {
    PROCEDURE proc_name
  | FUNCTION func_name
  | PACKAGE package_name }

<usage_privilege> ::= USAGE ON {
    EXCEPTION exception_name
  | {GENERATOR | SEQUENCE} sequence_name }

<ddl_privileges> ::=
  {ALL [PRIVILEGES] | <ddl_privilege_list>} <object_type>

<ddl_privilege_list> ::=
  <ddl_privilege> [, <ddl_privilege> ...]

<ddl_privilege> ::= CREATE | ALTER ANY | DROP ANY

<object_type> ::=
    CHARACTER SET | COLLATION | DOMAIN | EXCEPTION
  | FILTER | FUNCTION | GENERATOR | PACKAGE
  | PROCEDURE | ROLE | SEQUENCE | TABLE | VIEW

<db_ddl_privileges> ::=
  {ALL [PRIVILEGES] | <db_ddl_privilege_list>} {DATABASE | SCHEMA}

<db_ddl_privilege_list> ::=
  <db_ddl_privilege> [, <db_ddl_privilege> ...]

<db_ddl_privilege> ::= CREATE | ALTER | DROP

<grantee_list> ::= <grantee> [, <grantee> ...]

<grantee> ::=
    PROCEDURE proc_name  | FUNCTION func_name
  | PACKAGE package_name | TRIGGER trig_name
  | VIEW view_name       | ROLE role_name
  | [USER] username      | GROUP Unix_group
  | PUBLIC
  | <sys_privileges>

<sys_privileges> ::= SYSTEM PRIVILEGE <sys_privileges_list>

<sys_privileges_list> ::= <sys_privilege> [, <sys_privilege> [, <sys_privilege> ...]]
Синтаксис (назначение ролей)
GRANT <role_granted>
  TO <role_grantee_list>
  [WITH ADMIN OPTION]
  [{GRANTED BY | AS} [USER] grantor]

<role_granted> ::= [DEFAULT] role_name [, [DEFAULT] role_name ...]

<role_grantee_list> ::=
  <role_grantee> [, <role_grantee> ...]

<role_grantee> ::=
    [USER] username
  | [ROLE] grantee_role_name
Table 1. Параметры оператора GRANT
Параметр Описание

table_name

Имя таблицы, к которой должно быть предоставлена привилегия.

view_name

Имя представления, к которому должно быть предоставлена привилегия, или которому будут предоставлены привилегии.

col

Столбец таблицы, к которому должна быть применена привилегия.

proc_name

Имя хранимой процедуры, для которой должна быть выдана привилегия EXECUTE или которой будут предоставлены привилегии.

func_name

Имя хранимой функции (или UDF), для которой должна быть выдана привилегия EXECUTE или которой будут даны привилегии.

package_name

Имя пакета, для которого должна быть выдана привилегия EXECUTE или которому будут даны привилегии.

exception_name

Имя исключения, для которого должна быть выдана привилегия USAGE.

generator_name

Имя генератора (последовательности), для которого должна быть выдана привилегия USAGE.

object_type

Тип объекта метаданных.

object_list

Список объектов метаданных, которым будут даны привилегии.

trig_name

Имя триггера, которому будут даны привилегии.

user_list

Список пользователей/ролей, которым будут выданы привилегии.

username

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

rolename

Имя роли.

Unix_group

Имя группы пользователей в операционных системах семейства UNIX.Только в Firebird Embedded.

Unix_user

Имя пользователя в операционной системе семейства UNIX.Только в Firebird Embedded.

sys_privilege

Системная привилегия.

role_granted

Список ролей, которые будут назначены.

role_grantee_list

Список пользователей, которым будут назначены роли.

grantor

Пользователь от имени, которого предоставляются привилегии.

Оператор GRANT предоставляет одну или несколько привилегий для объектов базы данных пользователям, ролям, хранимым процедурам, функциям, пакетам, триггерам и представлениям.

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

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

Предложение TO

В предложении TO указывается список пользователей, ролей и объектов базы данных (процедур, функций, пакетов, триггеров и представлений) для которых будут выданы перечисленные привилегии.Необязательные предложения USER и ROLE позволяют уточнить, кому именно выдаётся привилегия.Если ключевое слово USER или ROLE не указано, то сервер проверяет, существует ли роль с данным именем, если таковой не существует, то привилегии назначаются пользователю.Существование пользователя, которому выдаются права, не проверяются при выполнении оператора GRANT.Если привилегия выдаётся объекту базы данных, то необходимо обязательно указывать тип объекта.

Tip
Рекомендация

Несмотря на то, что ключевые слова USER и ROLE не обязательные, желательно использовать их, чтобы избежать путаницы.

docnext count = 19

Примеры предоставления DDL привилегий на базу данных

Example 1. Разрешение пользователю Superuser создавать базы данных
GRANT CREATE DATABASE TO USER Superuser;
Example 2. Разрешение пользователю Joe выполнять оператор ALTER DATABASE для текущей базы данных
GRANT ALTER DATABASE TO USER Joe;
Example 3. Разрешение пользователю Fedor удалять текущую базу данных
GRANT DROP DATABASE TO USER Fedor;

Предоставление прав системным привилегиям

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

Примеры предоставления прав системным привилегиям

Следующий оператор назначит все привилегии на представление PLG$SRP_VIEW, используемое в плагине управления пользователями SRP, системной привилегии USER_MANAGEMENT.

GRANT ALL ON PLG$SRP_VIEW TO SYSTEM PRIVILEGE USER_MANAGEMENT

Описание системных привилегий вы можете посмотреть в CREATE ROLE

Назначение ролей

Синтаксис (выдача ролей)
GRANT <role_granted>
  TO <role_grantee_list>
  [WITH ADMIN OPTION]
  [{GRANTED BY | AS} [USER] grantor]

<role_granted> ::= [DEFAULT] role_name [, [DEFAULT] role_name ...]

<role_grantee_list> ::=
  <role_grantee> [, <role_grantee> ...]

<role_grantee> ::=
    [USER] username
  | [ROLE] grantee_role_name

Оператор GRANT может быть использован для назначения ролей для списка пользователей или ролей.В этом случае после предложения GRANT следует список ролей, которые будут назначены списку пользователей или ролей, указанному после предложения TO.

Ключевое слово DEFAULT

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

Предложение WITH ADMIN OPTION

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

Примеры назначения ролей

Example 1. Назначение ролей для пользователей
-- Назначение ролей DIRECTOR и MANAGER пользователю IVAN
GRANT DIRECTOR, MANAGER TO USER IVAN;

-- Назначение роли ADMIN пользователю ALEX
-- с возможностью назначить эту другим пользователям
GRANT MANAGER TO USER ALEX WITH ADMIN OPTION;
Example 2. Назначение ролей для пользователей с ключевым словом DEFAULT
-- Назначение роли MANAGER пользователю JOHN
-- Привилегии роли будут автоматически назначаться пользователю
-- каждый раз при входе. В этом случае роль выступает в качестве группы.
GRANT DEFAULT MANAGER TO USER JOHN;

-- Теперь при входе пользователь JOHN автоматически получит привилегии
-- ролей MANAGER (см. предыдущий оператор) и DIRECTOR
GRANT DEFAULT DIRECTOR TO USER JOHN;
Example 3. Назначение ролей другим ролям
-- Назначение роли MANAGER для роли DIRECTOR
-- с возможностью передачи роли MANAGER другим пользователям или ролям
GRANT MANAGER TO ROLE DIRECTOR WITH ADMIN OPTION;

-- Назначение роли ACCOUNTANT роли DIRECTOR
-- при входе в систему с ролью DIRECTOR полномочия роли ACCOUNTANT
-- будут также получены
GRANT DEFAULT ACCOUNTANT TO ROLE DIRECTOR;

-- Пользователь PETROV при входе автоматически получает
-- полномочия роли DIRECTOR. Эти полномочия будут включать также
-- полномочия роли ACCOUNTANT. Для получения полномочий роли MANAGER
-- необходимо указать эту роль при входе в систему или позже с
-- помощью оператора SET ROLE
GRANT DEFAULT ROLE DIRECTOR TO USER PETROV;
См. также:

REVOKE.

Пользователь PUBLIC

В SQL существует специальный пользователь PUBLIC, представляющий всех пользователей.Если какая-то операция разрешена пользователю PUBLIC, значит, любой аутентифицированный пользователь может выполнить эту операцию над указанным объектом.

Important

Если привилегии назначены пользователю PUBLIC, то и отозваны они должны быть у пользователя PUBLIC.

Предложение WITH GRANT OPTION

Необязательное предложение WITH GRANT OPTION позволяет пользователям, указанным в списке пользователей, передавать другим пользователям привилегии указанные в списке привилегий.

Предложение GRANTED BY

При предоставлении прав в базе данных в качестве лица, предоставившего эти права, обычно записывается текущий пользователь.Используя предложение GRANTED BY можно предоставлять права от имени другого пользователя.При использовании оператора REVOKE после GRANTED BY права будут удалены только в том случае, если они были зарегистрированы от удаляющего пользователя.Для облегчения миграции из некоторых других реляционных СУБД нестандартное предложение AS поддерживается как синоним оператора GRANTED BY.

Предложение GRANTED BY может использовать:

  • Владелец базы данных;

  • SYSDBA;

  • Любой пользователь, имеющий права на роль RDB$ADMIN и указавший её при соединении с базой данных;

  • При использовании флага AUTO ADMIN MAPPING — любой администратор операционной системы Windows (при условии использования сервером доверенной авторизации — trusted authentication), даже без указания роли.

Даже владелец роли не может использовать GRANTED BY, если он не находится в вышеупомянутом списке.

Табличные привилегии

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

Список привилегий для таблиц
SELECT

Разрешает выборку данных (SELECT) из таблицы или представления.

INSERT

Разрешает добавлять записи (INSERT) в таблицу или представление.

UPDATE

Разрешает изменять записи (UPDATE) в таблице или представлении.Можно указать ограничения, чтобы можно было изменять только указанные столбцы.

DELETE

Разрешает удалять записи (DELETE) из таблицы или представления.

REFERENCES

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

ALL

Объединяет привилегии SELECT, INSERT, UPDATE, DELETE и REFERENCES.

Примеры GRANT <privilege> для таблиц

Example 1. Предоставление привилегий для таблиц
-- Привилегии SELECT, INSERT пользователю ALEX
GRANT SELECT, INSERT ON TABLE SALES
TO USER ALEX;

-- Привилегия SELECT ролям MANAGER, ENGINEER и пользователю IVAN
GRANT SELECT ON TABLE CUSTOMER
TO ROLE MANAGER, ROLE ENGINEER, USER IVAN;

-- Все привилегии для роли ADMINISTRATOR
-- с возможностью передачи своих полномочий
GRANT ALL ON TABLE CUSTOMER
TO ROLE ADMINISTRATOR WITH GRANT OPTION;

-- Привилегии SELECT и REFRENCE для столбца NAME для всех пользователей
GRANT SELECT, REFERENCES (NAME) ON TABLE COUNTRY
TO PUBLIC;

-- Выдача привилегии SELECT для пользователя IVAN от имени пользователя ALEX
GRANT SELECT ON TABLE EMPLOYEE
TO USER IVAN GRANTED BY ALEX;

-- Привилегия UPDATE для столбцов FIRST_NAME, LAST_NAME
GRANT UPDATE (FIRST_NAME, LAST_NAME) ON TABLE EMPLOYEE
TO USER IVAN;

-- Привилегия INSERT для хранимой процедуры ADD_EMP_PROJ
GRANT INSERT ON EMPLOYEE_PROJECT
TO PROCEDURE ADD_EMP_PROJ;

Привилегия EXECUTE

Привилегия EXECUTE (выполнение) применима к хранимым процедурам, хранимым функциям, пакетам и унаследованным внешним функциям (UDF), определяемых как DECLARE EXTERNAL FUNCTION.

Для хранимых процедур привилегия EXECUTE позволяет не только выполнять хранимые процедуры, но и делать выборку данных из селективных процедур (с помощью оператора SELECT).

Note

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

Примеры предоставления привилегии EXECUTE

Example 1. Предоставление привилегии EXECUTE
-- Привилегия EXECUTE на хранимую процедуру
GRANT EXECUTE ON PROCEDURE ADD_EMP_PROJ
TO ROLE MANAGER;

-- Привилегия EXECUTE на хранимую функцию
GRANT EXECUTE ON FUNCTION GET_BEGIN_DATE TO ROLE MANAGER;

-- Привилегия EXECUTE на пакет
GRANT EXECUTE ON PACKAGE APP_VAR TO PUBLIC;

-- Привилегия EXECUTE на функцию выданная пакету
GRANT EXECUTE ON FUNCTION GET_BEGIN_DATE
TO PACKAGE APP_VAR;

Привилегия USAGE

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

Note

В Firebird 3 привилегия USAGE проверяется только для исключений (exception) и генераторов/последовательностей (в gen_id(gen_name, n) или next value for gen_name). Привилегии для других объектов метаданных могут быть включены в следующих релизах, если покажется целесообразным.

Note

Привилегия USAGE даёт права только на приращения генераторов (последовательностей) с помощью функции GEN_ID или конструкции NEXT VALUE FOR.Оператор SET GENERATOR является аналогом оператора ALTER SEQUENCE …​ RESTART WITH, которые относятся к DDL операторам.По умолчанию права на такие операции имеет только владелец генератора (последовательности). Права на установку начального значения любого генератора (последовательности) можно предоставить с помощью GRANT ALTER ANY SEQUENCE, что не рекомендуется для обычных пользователей.

Примеры предоставления привилегии USAGE

Example 1. Предоставление привилегии USAGE
-- Привилегия USAGE на последовательность выданная роли
GRANT USAGE ON SEQUENCE GEN_AGE TO ROLE MANAGER;

-- Привилегия USAGE на последовательность выданная триггеру
GRANT USAGE ON SEQUENCE GEN_AGE TO TRIGGER TR_AGE_BI;

-- Привилегия USAGE на исключение выданная пакету
GRANT USAGE ON EXCEPTION E_ACCESS_DENIED
TO PACKAGE PKG_BILL;

DDL привилегии

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

Список DDL привилегий
CREATE

Разрешает создание объекта указанного типа метаданных.

ALTER ANY

Разрешает изменение любого объекта указанного типа метаданных.

DROP ANY

Разрешает удаление любого объекта указанного типа метаданных.

ALL

Объединяет привилегии CREATE, ALTER и DROP на указанный тип объекта.

Note

Метаданные триггеров и индексов наследуют привилегии таблиц, которые владеют ими.

Примеры предоставления DDL привилегий

Example 1. Предоставление привилегий на изменение метаданных
-- Разрешение пользователю Joe создавать таблицы
GRANT CREATE TABLE TO Joe;

-- Разрешение пользователю Joe изменять любые процедуры
GRANT ALTER ANY PROCEDURE TO Joe;

DDL привилегии для базы данных

Оператор назначения привилегий на создание, удаление и изменение базы данных имеет несколько отличную форму от оператора назначения DDL привилегий на другие объекты метаданных.

Список DDL привилегий на базу данных
CREATE

Разрешает создание базы данных.

ALTER

Разрешает изменение текущей базы данных.

DROP

Разрешает удаление текущей базы данных.

ALL

Объединяет привилегии ALTER и DROP на базу данных.

Привилегия CREATE DATABASE является особым видом привилегий, поскольку она сохраняется в базе данных безопасности.Список пользователей имеющих привилегию CREATE DATABASE можно посмотреть в виртуальной таблице SEC$DB_CREATORS.Привилегию на создание новой базы данных могут выдавать только Администраторы в базе данных безопасности.

Привилегии ALTER DATABASE и DROP DATABASE относятся только к текущей базе данных, тогда как DDL привилегии ALTER ANY и DROP ANY на другие объекты метаданных относятся ко всем объектам указанного типа внутри текущей базы данных.Привилегии на изменение и удаление текущей базы данных могут выдавать только Администраторы.