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, так само, як і для всіх інших таблиць цієї бази даних