Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.Б.Д / лекции / 17БД.doc
Скачиваний:
0
Добавлен:
30.05.2020
Размер:
172.03 Кб
Скачать

3.2 Надання привілеїв користувачам

Оператор GRANT застосовується для надання привілеїв відносно пойменованих об'єктів бази даних вказаним користувачам. Звичайно його використовує власник таблиці з метою надання доступу до неї іншим користувачам . Оператор GRANT має наступний формат:

<надання_привілеїв>::=

GRANT {<привілей>[,...n]|

ALL PRIVILEGES}

ON ім'я_об'єкта

TO {<ідентифікатор_користувача>

[,...n]| PUBLIC}

[ WITH GRANT OPTION]

Параметр <привілей> є:

<привілей>::=

{SELECT | DELETE | INSERT

[(ім'я_колонки[,...n])]

| UPDATE [(ім'я_колонки [,...n])]}

| REFERENCES [(ім'я_колонки [,...n])] |

USAGE }

З міркувань спрощення в операторі GRANT можна вказати ключове слово ALL PRIVILEGES, що дозволить надати вказаному користувачу всі існуючі привілеї без необхідності їх переліку. Крім того, в цьому операторі може указуватися ключове слово PUBLIC, що означає надання доступу вказаного типу не тільки всім існуючим користувачам, але також і всім тим, хто буде визначений в базі даних згодом.

Параметр ім'я_об'єкта може використовуватися як ім'я таблиці бази даних, уявлення, домена, набору символів, перевірки.

Завдяки параметру WITH GRANT OPTION, вказані в операторі GRANT користувачі мають право передавати всі надані їм відносно вказаного об'єкту привілею іншим користувачам, які, у свою чергу, наділюватимуть точно таким же правом передачі своїх повноважень. Якщо даний параметр не буде вказаний, одержувач привілею не зможе передати свої права іншим користувачам. Таким чином, власник об'єкту може чітко контролювати, хто одержав право доступу до об'єкту і які повноваження йому надані.

3.3 Відміна наданих користувачам привілеїв

В язиці SQL для відміни привілеїв, наданих користувачам за допомогою оператора GRANT, використовується оператор REVOKE. За допомогою цього оператора можуть бути відмінено всі або деякі з привілеїв, одержаних вказаним користувачем раніше. Оператор REVOKE має наступний формат:

<відміна_привілеїв>::=

REVOKE[GRANT OPTION FOR]

{<привілей>[,...n]

| ALL PRIVILEGES}

ON ім'я_об'єкта

FROM {<ідентифікатор_користувача>

[,...n]| PUBLIC}

[RESTRICT | CASCADE]

Ключове слово ALL PRIVILEGES означає, що для вказаного користувача відміняються всі привілеї, надані йому раніше тим користувачем, якого ввів даний оператор. необов'язкова фраза GRANT OPTION FOR дозволяє для всіх привілеїв, переданих в початковому операторі GRANT фразою WITH GRANT OPTION, відміняти можливість їх передачі незалежно від самих привілеїв.

Якщо в операторі вказано ключове слово RESTRICT, успішне виконання команди REVOKE можливе лише у тому випадку, коли перераховані в операторі привілеї не можуть послужити причиною появи у яких-небудь інших користувачів так званих "залишених" привілеїв. За допомогою параметра CASCADE віддаляються всі привілеї, які інакше могли б залишитися у інших користувачів.

"Залишеними" є привілеї, що збереглися у користувача, якому вони свого часу були надані за допомогою параметра GRANT OPTION.

Оскільки наявність привілею необхідна для створення певних об'єктів, разом з її видаленням можна позбавитися права, за рахунок використовування якого був утворений той або інший об'єкт (подібні об'єкти називаються "кинутими"). Якщо в результаті виконання оператора REVOKE можуть з'явитися кинуті об'єкти (наприклад, уявлення), право буде відмінено за умови, що в ньому не указується ключове слово CASCADE. Якщо ключове слово CASCADE в операторі присутнє, то для будь-яких кинутих об'єктів, що виникають при виконанні початкового оператора REVOKE, будуть автоматично видані оператори DROP.

Привілеїв, які були надані вказаному користувачу іншими користувачами, не можуть торкнутися оператором REVOKE. Отже, якщо інший користувач також надав даному користувачу привілей, що видаляється, то право доступу до відповідної таблиці у вказаного користувача збережеться. Наприклад, хай користувач А і користувач Е мали право INSERT на таблицю Товар. Користувач А надав користувачу B привілей INSERT для таблиці Товар, причому з вказівкою WITH GRANT OPTION (етап 1). Користувач B передав цей привілей користувачу С (етап 2). Потім користувач З одержав її ж від користувача E (етап 3). Далі користувач С надав згаданий привілей користувачу D (етап 4). Коли користувач А відміняє привілей INSERT для користувача B, вона не може бути відмінена і для користувача С, оскільки раніше він вже одержав її від користувача E. Якби користувач E не надав даного привілею користувачу С, те видалення привілею користувача B мало б слідством каскадне видалення привілеїв для користувачів С і D (див. таблицю 17.1).

Соседние файлы в папке лекции