|
Программирование >> Построение запросов sql
таблице (представлению) управляется с помощью привилегий доступа, т.е. списком операций, которые пользователю разрешено выполнять над данной таблицей (представлением). Для управления привилегиями служит запрос GRANT, который передает привилегии доступа определенному пользователю, роли, процедуре или триггеру к таблице или представлению. Для удаления привилегий используется запрос REVOKE. Запрос GRANT может быть использован для следующих операций по передаче привилегий: - передача пользователям, триггерам, хранимым процедурам или представлениям: SELECT, INSERT, UPDATE, DELETE и REFERENCES привилегий доступа к таблице; - передача пользователям, триггерам, хранимым процедурам или представлениям: SELECT, INSERT, UPDATE и DELETE привилегий доступа к представлению; - передача для роли: SELECT, INSERT, UPDATE, DELETE и REFERENCES привилегий доступа к таблице; - передача для роли: SELECT, INSERT, UPDATE и DELETE привилегий доступа к представлению; - передача пользователям права использовать привилегии, переданные конкретной роли, т. е. при подключении к БД обладать привилегиями, определенными соответствующей ролью в БД; - передача пользователям, триггерам, хранимым процедурам или представлениям EXECUTE привилегии на выполнение хранимой процедуры. В табл. 7.1 приведено описание привилегий доступа.
Примечание. Зарезервированное слово ALL обеспечивает механизм для присвоения SELECT, DELETE, INSERT, UPDATE и REFERENCES привилегий одновременно. При этом ALL не передает право на использование роли или EXECUTE привилегию на выполнение хранимой процедуры. Все объекты БД имеют определенный уровень доступа при их создании. Первоначально только создатель объекта БД имеет к нему доступ и только он может передать определенные привилегии доступа другим пользователям или хранимым процедурам. При этом системный администратор Firebird SYSDBA имеет доступ ко всем без исключения объектам БД. В связи с этим настоятельно рекомендуется как можно раньше изменить стандартный пароль masterkey , который имеет SYSDBA. Примечание. СУБД не проверяет никакие права доступа для пользователя SYSDBA. В частности, поэтому операции над множеством объектов производятся от имени SYSDBA чуть быстрее, чем от имени других пользователей [18]. Запрос GRANT имеет следующий синтаксис: GRANT {<привилегии> ON [TABLE] {базовая таблица представление} TO {<объект> <список пользователей> [WITH GRANT OPTION] } } EXECUTE ON PROCEDURE имя процедуры TO {<объект> <список пользователей> [WITH GRANT OPTION]} <список ролей> TO {PUBLIC <список пользователей> [WITH ADMIN OPTION]};, <привилегии>::= {ALL [PRIVILEGES] <список привилегий>}; <список привилегий> {SELECT DELETE INSERT UPDATE [(<список столбцов>)[ REFERENCES [(<список столбцов>)]} [, <список привилегий> <объект> {PROCEDURE имя процедуры TRIGGER имя триггера VIEW представление [ROLE] имя роли PUBLIC [, <объект> ]}; <список пользователей> [USER] имя пользователя1 [, [USER] имя пользователя2 <список ролей> имя роли1 [, имя роли2 Зарезервированное слово PUBLIC означает, что указанные привилегии доступа к заданному объекту БД становятся общедоступными и невозможно отобрать эти привилегии у конкретного пользователя. Следует учесть, что PUBLIC используется для обозначения именно всех пользователей БД, и переданные с помощью PUBLIC привилегии не будут доступны ХП, триггерам, представлениям и ролям. Пусть на сервере зарегистрированы, например с помощью утилиты IBExpert, два пользователя: Ivanov и Petrov. Имеются: представление Ab PaySum VIEW, хранимые процедуры Factorial и FactorialSet, триггеры AbonentDELETE и ServicesUPDATE, которые, как и все остальные объекты БД, созданы пользователем SYSDBA. Например, для передачи пользователю Ivanov всех привилегий доступа на таблицу Abonent следует выполнить следующий запрос GRANT: GRANT ALL ON Abonent TO Ivanov;. Передача привилегии SELECT на представление Ab PaySum VIEW пользователю Petrov может быть выполнена следующим образом: GRANT SELECT ON Ab PaySum VIEW TO Petrov;. Для передачи в общее пользование права обновлять столбцы Fio и AccountCD таблицы Abonent следует выполнить следующий запрос: GRANT UPDATE (Fio, AccountCD) ON Abonent TO PUBLIC;. Предложение WITH GRANT OPTION используется для передачи пользователю права передавать привилегии другим пользователям. Например, чтобы передать пользователю Ivanov привилегию чтения таблицы Abonent с правом передавать эту привилегию другим пользователям, необходимо использовать следующий запрос: GRANT SELECT ON TABLE Abonent TO Ivanov WITH GRANT OPTION;. Для передачи привилегий нескольким пользователям имена пользователей должны быть перечислены через запятую. Например, чтобы передать пользователям Ivanov и Petrov все привилегии на таблицу Abonent, необходимо использовать следующий запрос: GRANT ALL ON Abonent TO Ivanov, Petrov;. Иногда требуется передача привилегий хранимым процедурам или триггерам для доступа к таблицам или представлениям, которые имеют другого владельца. Например, чтобы передать хранимой процедуре Factorial и триггеру Abonent DELETE все привилегии доступа на таблицу Abonent, необходимо использовать следующий запрос: GRANT ALL ON Abonent TO PROCEDURE Factorial, TRIGGER Abonent DELETE;. Можно задавать привилегии и на выполнение хранимых процедур. Для выполнения (вызова) хранимых процедур пользователями или другими объектами БД необходимо передать EXECUTE привилегию на соответствующую хранимую процедуру. Рассмотрим пример по передаче привилегий пользователю Ivanov на выполнение хранимой процедуры FactorialSet (которая, в свою очередь, вызывает хранимую процедуру Factorial и записывает результат своей работы в таблицу Ftable). Также будем считать, что никаких других привилегий пользователь Ivanov в БД не имеет. Рассмотрим последовательность запросов
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |