
- •254 Понимание sql
- •256 Понимание sql
- •258 Понимание sql
- •260 Понимание sql
- •262 Понимание sql
- •266 Понимание sql
- •268 Понимание sql
- •270 Понимание sql
- •272 Понимание sql
- •274 Понимание sql
- •276 Понимание sql
- •278 Понимание sql
- •280 Понимание sql
- •282 Понимание sql
- •284 Понимание sql
- •286 Понимание sql
- •288 Понимание sql
- •290 Понимание sql
- •292 Понимание sql
- •294 Понимание sql
- •Глава 23 продолжит обсуждение о выводах в sql, таких как сохранение
286 Понимание sql
______________________________________________________________________
ГЛ. 22
Конечно, вы можете предоставить любые или все привилегии обществу,
но это видимо нежелательно. Все привилегии за исключением SELECT
позволяют пользователю изменять ( или, в случае REFERENCES, ограни-
чивать) содержание таблицы. Разрешение всем пользователям изменять
содержание ваших таблиц вызовет проблему.
Даже если вы имеете небольшую компанию, и в ней работают все ваши
текущие пользователи способные выполнять команды модификации в
данной таблице, было бы лучше предоставить привилегии каждому поль-
зователю индивидуально, чем одни и те же привелегии для всех.
PUBLIC не ограничен в его передаче только текущим пользователям.
Любой новый пользователь добавляемый к вашей системе, автоматичес-
ки получит все привилегии назначенные ранее всем, так что если вы за-
хотите ограничить доступ к таблице всем, сейчас или в будущем, лучше
всего предоставить привилегии иные чем SELECT для индивидуальных
пользователей.
ПРЕДОСТАВЛЕНИЕ ПРИВЕЛЕГИЙ
С ПОМОЩЬЮ WITH GRANT OPTION
Иногда, создателю таблицы хочется чтобы другие пользователи могли
получить привилегии в его таблице. Обычно это делается в системах, где
один или более людей создают несколько (или все) базовые таблицы в ба-
зе данных а затем передают ответственность за них тем кто будет факти-
чески с ними работать. SQL позволяет делать это с помощью предложения
WITH GRANT OPTION.
Если Diane хотела бы чтобы Adrian имел право предоставлять привилегию
SELECT в таблице Заказчиков другим пользователям, она дала бы ему при-
вилегию SELECT с использованием предложения WITH GRANT OPTION:
GRANT SELECT ON Customers TO Adrian
WITH GRANT OPTION;
После того Adrian получил право передавать привилегию SELECT треть-
им лицам; он может выдать команду
GRANT SELECT ON Diane.Customers TO Stephen;
или даже
GRANT SELECT ON Diane.Customers TO Stephen
WITH GRANT OPTION;
ОПРЕДЕЛЕНИЕ: КТО ЧТО МОЖЕТ ДЕЛАТЬ 287
______________________________________________________________________
Пользователь с помощью GRANT OPTION в особой привилегии для дан-
ной таблицы, может, в свою очередь, предоставить эту привилегию к той
же таблице, с или без GRANT OPTION, любому другому пользователю.
Это не меняет принадлежности самой таблицы; как и прежде таблица при-
надлежат ее создателю. ( поэтому пользователи получившие права, должны
устанавливать префикс ID доступа владельца когда ссылаются к этим таб-
лицам. Следующая глава покажет вам этот способ. ) Пользователь же с
помощью GRANT OPTION во всех привилегиях для данной таблицы будет
иметь всю полноту власти в той таблице.
ОТМЕНА ПРИВИЛЕГИЙ
Также как ANSI предоставляет команду CREATE TABLE чтобы создать
таблицу, а не DROP TABLE чтобы от нее избавиться, так и команда GRANT
позволяет вам давать привилегии пользователям, не предоставляя способа чтобы
отобрать их обратно. Потребность удалять привилегии сводится к команде
REVOKE, фактически стандартному средству с достаточно понятной формой
записи.
Синтаксис команды REVOKE - похож на GRANT, но имеет обратный смысл.
Чтобы удалить привилегию INSERT для Adrian в таблице Порядков, вы мо-
жете ввести
REVOKE INSERT ON Orders FROM Adrian;
Использование списков привилегий и пользователей здесь допустимы как и
в случае с GRANT, так что вы можете ввести следующую команду:
REVOKE INSERT, DELETE ON Customers
FROM Adrian, Stephen;
Однако, здесь имеется некоторая неясность. Кто имеет право отменять при-
вилегии? Когда пользователь с правом передавать привелегии другим, теря-
ет это право? Пользователи которым он предоставил эти привилегии, также
их потеряют ? Так как это не стандартная особенность, нет никаких автори-
тетных ответов на эти вопросы, но наиболее общий подход - это такой:
* Привилегии отменяются пользователем который их предоставил, и отме-
на будетт каскадироваться, то-есть она будет автоматически распростра-
няться на всех пользователям получивших от него эту привилегию.