Скасування наданих користувачам привілеїв
Надання привілеїв користувачам
Оператор GRANT застосовується длянадання привілеїв щодо пойменованих об'єктів бази даних зазначенимкористувачам. Зазвичай його використовуєвласниктаблиці з метоюнадання доступудо неї іншимкористувачам. Оператор GRANT має такий формат:
[ WITH GRANT OPTION]
Параметр є:
UPDATE [(ім'я_стовпця[. n])]>
REFERENCES [(ім'я_стовпця[. n])]
З міркувань спрощення в операторі GRANT можна вказати ключове слово ALL PRIVILEGES, що дозволить надати вказаномукористувачевівсі існуючіпривілеїбез необхідності їх перерахування. Крім того, в цьому операторі може вказуватися ключове слово PUBLIC, що означає надання доступу зазначеного типу не тільки всім існуючим користувачам, але також і всім тим, хто буде визначений в базі даних згодом.
Параметр ім'я_об'єкта може використовуватися як ім'я таблиці бази даних, уявлення, домену, набору символів, перевірки.
Завдяки параметру WITH GRANT OPTION, вказані в операторі GRANTкористувачімаютьправопередавати всінаданіїм щодо зазначеного об'єктапривілеїіншимкористувачам, які, у свою чергу, будуть наділені таким самимправомпередачі своїх повноважень. Якщо цей параметр не буде вказано, одержувачпривілеюне зможе передати своїправаіншимкористувачам. Таким чином, власник об'єкта може чітко контролювати, хто отримав право доступу до об'єкта і які повноваження йому надано.
У мові SQL дляскасування привілеїв,наданих користувачамза допомогою оператора GRANT, використовується оператор REVOKE. За допомогою цього оператора можуть бути скасовані всі або деякі з привілеїв, отриманих зазначеним користувачем раніше. Оператор REVOKE має такий формат:
REVOKE[GRANT OPTION FOR]
Ключове слово ALL PRIVILEGES означає, що для зазначеногокористувача скасовуютьсявсіпривілеї,наданійому раніше тим користувачем, який ввів даний оператор. Необов'язкова фраза GRANT OPTION FOR дозволяє всімпривілеїв, переданих у вихідному операторі GRANT фразою WITH GRANT OPTION, скасовувати можливість їх передачі незалежно від самихпривілеїв.
Якщо в операторі вказано ключове слово RESTRICT, успішне виконання команди REVOKE можливе лише в тому випадку, коли перераховані в операторіпривілеїне можуть спричинити появу у будь-яких іншихкористувачівтак званих "залишених" "привілеїв. За допомогою параметра CASCADE видаляються усіпривілеї, які інакше могли б залишитися в іншихкористувачів.
"Залишеними" єпривілеї, що збереглися укористувача, якому вони свого часу булинаданіза допомогою параметра GRANT OPTION.
Оскільки наявністьпривілеюнеобхідна для створення певних об'єктів, разом з її видаленням можна втратитиправа, за рахунок використання якого було утворено той чи інший об'єкт (подібні об'єкти називаються "кинутими"). Якщо в результаті виконання оператора REVOKE можуть з'явитися кинуті об'єкти (наприклад, уявлення), право буде скасовано за умови, що в ньому не вказується ключове слово CASCADE. Якщо ключове слово CASCADE в операторі є, то для будь-яких кинутих об'єктів,що виникають під час виконання вихідного оператора REVOKE, будуть автоматично видані оператори DROP.
Привілеї, які булинаданізазначеномукористувачевііншимикористувачами, не можуть бути порушені оператором REVOKE. Отже, якщо іншийкористувачтакож надав даномукористувачувидаленийпривілей, топраво доступудо відповідної таблиці у зазначеногокористувача> Збережеться. Наприклад, нехайкористувачA такористувачЕ малиправоINSERT на таблицю Товар.КористувачА надавкористувачевіBпривілейINSERT для таблиці Товар, причому із зазначенням WITH GRANT OPTION (етап 1).КористувачB передав цейпривілей користувачевіC (етап 2). ПотімкористувачC отримав її ж відкористувачаE(етап 3). ДалікористувачC надав згаданийпривілей користувачевіD (етап 4). КоликористувачAскасовує привілейINSERT длякористувачаB, вона не може бутискасованаі длякористувачаC, оскільки раніше він уже отримав її відкористувачаE. ЯкбикористувачE не надав даноїпривілеї користувачевіC, то видаленняпривілею користувачаB мало б наслідком каскадне видаленняпривілеївдлякористувачівC та D (див. таблицю 17.1).