Мова керування даними (DCL)

Мова управління даними є підмножиною мови структурованих запитів. Адміністратори баз даних використовують DCL для налаштування безпечного доступу до реляційних баз даних. Він доповнює мову визначення даних, яка додає і видаляє об'єкти бази даних, і мову маніпулювання даними, яка витягує, вставляє і змінює вміст бази даних.

DCL є найпростішим з підмножин SQL, оскільки він складається тільки з трьох команд: GRANT, REVOKE и DENY. У сукупності ці три команди надають адміністраторам можливість гнучко встановлювати і видаляти дозволи бази даних.

Додавання дозволів за допомогою команди GRANT

Команда GRANT додає нові дозволи користувачеві бази даних. У нього дуже простий синтаксис, визначений наступним чином:

GRANT [привілей]
ON [об'єкт]
[користувач]
[з опцією GRANT]

Ось короткий опис кожного з параметрів, які ви можете вказати за допомогою цієї команди:

  • Привілей - може бути ключовим словом ALL (для надання широкого спектру дозволів) або певною роздільною здатністю бази даних або набором дозволів. Приклади включають CREATE DATABASE, SELECT, INSERT, UPDATE, DELETE, EXECUTE і CREATE VIEW.
  • Об'єкт - може бути будь-яким об'єктом бази даних. Допустимі параметри привілеїв залежать від типу об'єкта бази даних, який ви включаєте в цю пропозицію. Як правило, об'єкт буде базою даних, функцією, збереженою процедурою, таблицею або виставою.
  • Користувач - може бути будь-яким користувачем бази даних. У цьому пункті ви також можете замінити роль користувача, якщо бажаєте використовувати безпеку баз даних на основі ролей.
  • Якщо ви додасте необов "язкову умову WITH GRANT OPTION наприкінці команди GRANT, ви не лише надасте вказаному користувачеві дозволи, визначені в операторі SQL, але й дасте користувачеві дозвіл на подальше надання тих самих дозволів іншим користувачам бази даних. З цієї причини використовуйте цей пункт з обережністю.

Наприклад, припустимо, що ви хочете надати користувачеві Джо можливість отримувати інформацію з таблиці співробітників у базі даних з назвою HR. Використовуйте наступну команду SQL:

ГРАНТ ВИБРАТИ
НА HR.mployees
TO Джо

Джо може отримати інформацію з таблиці співробітників. Однак він не зможе надати іншим користувачам дозвіл на вилучення інформації з цієї таблиці, тому що сценарій DCL не включає пропозицію WITH GRANT OPTION.

Скасування доступу до бази даних

Команда REVOKE вилучає доступ до бази даних від користувача, який раніше надав такий доступ. Синтаксис цієї команди визначається таким чином:

REVOKE [GRANT OPTION FOR] [роздільна здатність]
ON [об'єкт]
FROM [користувач]
[CASCADE]

Ось короткий опис параметрів команди REVOKE:

  • Дозвіл - вказує повноваження бази даних для видалення від ідентифікованого користувача. Команда скасовує твердження GRANT і DENY, раніше зроблені для зазначеного дозволу.
  • Об'єкт - може бути будь-яким об'єктом бази даних. Допустимі параметри привілеїв залежать від типу об'єкта бази даних, який ви включаєте в цю пропозицію. Як правило, об'єктом є база даних, функція, збережена процедура, таблиця або подання.
  • Користувач - може бути будь-яким користувачем бази даних. У цьому пункті ви також можете замінити роль користувача, якщо бажаєте використовувати безпеку баз даних на основі ролей.
  • Пропозиція GRANT OPTION FOR видаляє можливість вказаного користувача надавати вказану роздільну здатність іншим користувачам. Якщо ви увімкнете пропозицію GRANT OPTION FOR до оператора REVOKE, основну роздільну здатність не буде скасовано. Цей пункт скасовує тільки можливість надання.
  • Параметр CASCADE також анулює вказану роздільну здатність від будь-яких користувачів, яким вказаний користувач надав дозвіл.

Наступна команда скасовує роздільну здатність, надану Джо в попередньому прикладі:

СКАСУВАТИ ВИБРАТИ
НА HR.employees
ВІД Джо

Явна відмова у доступі до бази даних

Команда DENY явно забороняє користувачеві отримувати певну роздільну здатність. Ця функція корисна, коли користувач є членом ролі або групи, якій надано дозвіл, і ви хочете заборонити цьому окремому користувачеві успадковувати дозвіл шляхом створення винятку. Синтаксис цієї команди наступний:

DENY [роздільна здатність]
ON [об'єкт]
TO [користувач]

Параметри команди DENY ідентичні параметрам, які використовуються для команди GRANT. Наприклад, якщо ви хочете, щоб Метью ніколи не отримував можливість видаляти інформацію з таблиці співробітників, введіть наступну команду:

ЗАБОРОНИТИ ВИЛУЧИТИ
ЗА HR.employees
К Матф