Шрифт:
Упрощенный синтаксис выглядит следующим образом:
GRANT EXECUTE
ON PROCEDURE <имя-процедуры> TO <получатель>;
<получатель> = [ PROCEDURE <имя-процедуры> [, <имя-процедуры> [, ..]]] [ TRIGGER <имя-триггера> [, <имя-триггера> [, ...]]] [ VIEW <имя-просмотра> [, <имя-просмотра> [, ...]]] | <имя-роли> | <пользователь-или-список> | PUBLIC [WITH GRANT OPTION];
Хранимой процедуре или триггеру нужна привилегия EXECUTE К хранимой процедуре, если она имеет другого владельца. Помните, что владельцем триггера является пользователь, создавший таблицу.
Если ваш оператор GRANT EXECUTE предоставляет привилегии для PUBLIC, то никакие другие типы получателей привилегий не могут быть представлены в качестве аргументов то.
В следующем примере оператор GRANT EXECUTE предоставляет привилегию к процедуре CALCULATE_BEANS двум обычным пользователям FLAT FOOT и KILROY и Двум Хранимым процедурам, чьи владельцы не являются владельцами CALCULATE_BEANS:
GRANT EXECUTE ON PROCEDURE CALCULATE_BEANS
TO FLATFOOT,
KILROY,
PROCEDURE DO_STUFF, ABANDON_OLD ;
Привилегии к просмотрам являются довольно запутанными. Владелец просмотра должен предоставить пользователям привилегию SELECT, как это сделал бы владелец таблицы. Сложности начинаются, если просмотр является изменяемым - естественным образом или через триггеры просмотра- или если просмотр включает другие просмотры или хранимые процедуры выбора. Изменения данных изменяемого просмотра фактически выполняют изменения в базовых таблицах. Если владельцы базовых объектов еще не предоставили пользователю соответствующих прав (INSERT, UPDATE, DELETE, EXECUTE) к базовым таблицам и объектам, а также к хранимым процедурам выбора или к просмотрам, то пользователю нужно их получить от владельца просмотра.
Привилегии REFERENCES неприменимы к просмотрам за исключением одной (обычно опускаемой) ситуации. Если просмотр использует таблицу, которая имеет внешние ключи, ссылающиеся на другие таблицы, то просмотру нужны привилегии REFERENCES к этим другим таблицам, если эти таблицы сами не используются в данном просмотре.
Подробности см. в разд. "Привилегии" главы 24.
Множество привилегий и множество получателей привилегий
Есть возможность предоставлять несколько привилегий в одном операторе и предоставлять одну или более привилегий множеству пользователей или объектов.
Для предоставления получателю нескольких привилегий к таблице перечислите предоставляемые привилегии в списке, отделяя друг от друга запятыми. Следующий оператор назначает полномочия INSERT и UPDATE К таблице DEPARTMENT пользователю
CHALKY:
GRANT INSERT, UPDATE ON DEPARTMENT TO CHALKY;
Список привилегий может быть любой комбинацией в любом порядке привилегий
SELECT, INSERT, UPDATE, DELETE и REFERENCES. Привилегия EXECUTE должна назначаться в отдельном операторе.
Привилегия REFERENCES не может быть назначена просмотру.
Привилегия ALL объединяет привилегии SELECT, INSERT, UPDATE, DELETE и REFERENCES В одном пакете. Например, следующий оператор предоставляет CHALKY полный пакет полномочий к таблице DEPARTMENT:
GRANT ALL ON DEPARTMENT TO CHALKY;
Вы также можете назначать пакет ALL триггерам и процедурам. В следующем операторе процедура COUNT_CHICKENS получает полные права к таблице PROJ_DEPT_BUDGET:
GRANT ALL ON PROJ_DEPT_BUDGET TO PROCEDURE COUNT_CHICKENS;
Несколько видов синтаксиса позволяют вам предоставлять привилегии множеству пользователей в одном операторе. Вы также можете назначать привилегии:
* списку именованных пользователей или процедур;
* группе UNIX;
* всем пользователям (PUBLIC);
* роли (затем назначая эту роль списку пользователей, PUBLIC или группе UNIX).
Для назначения одних и тех же привилегий доступа пользователям в одном операторе запищите список пользователей, разделенных запятыми, на месте одного имени пользователя.
Следующий оператор предоставляет полномочия INSERT и UPDATE К таблице DEPARTMENT пользователям MICKEY, DONALD и HPOTTER:
GRANT INSERT, UPDATE ON DEPARTMENTS TO MICKEY, DONALD, HPOTTER;
Для назначения привилегий нескольким процедурам в одном операторе запишите список процедур, разделенных запятыми. Здесь две процедуры получают привилегии в одном операторе: