Предоставление привилегии выполняется SQL-оператором GRANT, который имеет в стандарте SQL-92 следующее формальное описание:
GRANT privilege .,… ON { [TABLE] table_name | DOMAIN domain_name | COLLATION collation_name | CHARACTER SET set_name | TRANSLATION translation_name } TO { user_name .,… } | PUBLIC [ WITH GRANT OPTION ]
После фразы GRANT через запятую можно перечислить список всех назначаемых привилегий.
Фраза ON определяет объект, для которого устанавливается привилегия.
Фраза TO указывает пользователя или пользователей, для которых устанавливается привилегия.
Так, оператор GRANT SELECT ON tbl1 TO PUBLIC; предоставляет доступ к выполнению оператора SELECT для таблицы tbl1 не только всем существующим пользователям, но и тем, которые позднее будут добавлены в базу данных.
Оператор GRANT UPDATE ON tbl1 TO user1; предоставляет пользователю user1 привилегию UPDATE на всю таблицу, а оператор GRANT UPDATE (f1,f2) ON tbl1 TO user1; предоставляет привилегию UPDATE для изменения только столбцов f1 и f2.
Фраза WITH GRANT OPTION предоставляет получающему привилегию пользователю дополнительную привилегию GRANT OPTION, позволяющую выполнять передачу полученных привилегий.
Отмена привилегии выполняется SQL-оператором REVOKE, который имеет в стандарте SQL-92 следующее формальное описание:
REVOKE [ GRANT OPTION FOR ] { ALL PRIVILEGES } | privilege ON { [TABLE] table_name | DOMAIN domain_name | COLLATION collation_name | CHARACTER SET set_name | TRANSLATION translation_name } FROM { PUBLIC | user_name .,… } [ CASCADE | RESTRICT ]
После фразы REVOKE через запятую можно перечислить список всех отменяемых привилегий.
Фраза ON определяет объект, для которого отменяется привилегия.
Фраза FROM указывает пользователя или пользователей, для которых отменяется привилегия.
Фраза GRANT OPTION FOR определяет отмену не самих привилегий, а только права их передачи другим пользователям.
Если одна привилегия вместе с опцией WITH GRANT OPTION была последовательно передана от одного пользователя другому несколько раз, то образуется цепочка зависимых привилегий. Фразы CASCADE и RESTRICT определяют, что будет происходить с этими привилегиями при отмене одного из звеньев этой цепочки.
Если при отмене зависимой привилегии для объекта не остается ни одной существующей привилегии, то такой объект называется несостоявшимся.
Например, подобное может произойти с представлением, созданным как запрос к таблице, привилегия на которую была утрачена. Эта ситуация показана на рисунке 8.1.
Рис. 8.1. Появление несостоявшегося объекта
Если при отмене привилегии появляется несостоявшийся объект, то фраза RESTRICT предотвратит выполнение оператора REVOKE, и никакие привилегии отменены не будут.
Если указана фраза CASCADE и при отмене привилегии появляется несостоявшийся объект, то все несостоявшиеся объекты (представления) удаляются, а при наличии несостоявшихся ограничений в таблицах они отменяются автоматически выполнением оператора ALTER TABLE; несостоявшиеся ограничения в доменах отменяются автоматически выполнением оператора ALTER DOMAIN.
Роли
Ролью называется именованный набор привилегий. Объединение привилегий в роли значительно упрощает процесс назначения и снятия привилегий. Если СУБД поддерживает управление ролями, то в SQL-операторах GRANT и REVOKE вместо имени пользователя можно указывать имя роли.