Скачиваний:
17
Добавлен:
01.04.2014
Размер:
137.73 Кб
Скачать

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;

Однако, здесь имеется некоторая неясность. Кто имеет право отменять при-

вилегии? Когда пользователь с правом передавать привелегии другим, теря-

ет это право? Пользователи которым он предоставил эти привилегии, также

их потеряют ? Так как это не стандартная особенность, нет никаких автори-

тетных ответов на эти вопросы, но наиболее общий подход - это такой:

* Привилегии отменяются пользователем который их предоставил, и отме-

на будетт каскадироваться, то-есть она будет автоматически распростра-

няться на всех пользователям получивших от него эту привилегию.

Соседние файлы в папке ПОНИМАНИЕ SQL