Deny (SQL)
DENY — оператор мови SQL, який не дає користувачам можливості виконувати дії. Це означає, що такий оператор видаляє існуючі повноваження у облікових записах користувачів або не дозволяє користувачам застосовувати повноваження від їх участі в групах, які можуть бути отримані в майбутньому.
Синтаксис команди DENY
DENY {ALL [PRIVILEGES]} | permission_list
[ON [class::] securable] TO principal_list
[CASCADE] [ AS principal ]
Всі опції оператора DENY
мають таке ж логічне значення, що і опції з тими ж самими іменами в операторі GRANT, DENY
має додаткову опцію CASCADE
, яка вказує, що повноваження не будуть застосовуватися для користувача А і для будь-якого користувача, якому користувач А передасть ці повноваження . (Якщо опція CASCADE
не зазначена в операторі DENY
і відповідні повноваження до об'єкта задаються з WITH GRANT OPTION
, то повертається помилка.)
Приклади використання оператора DENY
Оператор DENY
забороняє користувачеві, групі або ролі отримувати доступ до повноважень, отриманим через їх участь в групі або ролі. Це означає, що якщо користувач належить групі (або ролі) і надані групі повноваження скасовуються для цього користувача, то цей користувач буде єдиним в групі, хто не зможе використовувати ці повноваження. З іншого боку, якщо повноваження скасовуються для всієї групи, то ці повноваження скасовуються для всіх членів цієї групи.
Приклад №1:
USE sample;
DENY CREATE TABLE, CREATE PROCEDURE
TO username
Інструкція DENY
у прикладі №1 скасовує для користувача username
раніше надані йому дозволи на створення таблиць і процедур.
Приклад №2:
USE sample;
GRANT SELECT ON project
TO PUBLIC;
DENY SELECT ON project
TO username1, username2
У прикладі №2 показана негативна авторизація для деяких користувачів бази даних sample
.
Спочатку надається право на читання всіх рядків з таблиці project
для всіх користувачів бази даних sample
. Потім це право скасовується для двох користувачів: username1
і username2
.
Примітки
- інструкцію GRANT можна розглядати як позитивну авторизацію користувача, а інструкцію
DENY
- як негативну. Зазвичай інструкціяDENY
використовується для заборони дозволів, вже наданих для групи (або ролі), окремим членам цієї групи. - Заборона дозволів на більш високому рівні моделі безпеки компонента Database Engine анулює дозволи, надані на більш низькому рівні. Наприклад, якщо дозвіл SELECT заборонено на рівні бази даних
sample
(Приклад №1), і цей дозвіл передбачається для таблиціemployee
, в результаті чого дозвіл SELECT буде заборонено для таблиціemployee
, так само, як і для всіх інших таблиць цієї бази даних