Кожен користувач в SQL базі даних має набір привілеїв. Це - те, що користувачеві дозволяється робити. Ці привілеї можуть змінюватися з часом - нові додаватися, старі віддалятися. Деякі з цих привілеїв визначені в ANSI SQL, але є й додаткові привілеї, які є також важливими.
SQL привілеї, як визначено ANSI, не достатні в більшості ситуацій реального життя. З іншого боку, типи привілеїв, які необхідні, можуть видозмінюватися з видом системи, яку ви використовуєте, щодо якої ANSI не може дати ніяких рекомендацій. Привілеї, які не є частиною стандарту SQL, можуть використовувати схожий синтаксис і не цілком збігається зі стандартом.
стандартні привілеї
SQL привілеї, визначені ANSI - це привілеї об'єкта. Це означає, що користувач має привілей, щоб виконати дану команду тільки на певному об'єкті в базі даних. Очевидно, що привілеї повинні розрізняти ці об'єкти, але система привілеїв, заснована виключно на привілеї об'єкта не може описувати все, що потрібно SQL, як ми побачимо це пізніше в цьому розділі.
Привілеї об'єкта пов'язані одночасно і з користувачами, і з таблицями. Тобто, привілей дається певному користувачеві у зазначеній таблиці, або базової таблиці або поданні. Ви повинні пам'ятати, що користувач, який створив таблицю (будь-якого виду), є власником цієї таблиці. Це означає, що користувач має всі привілеї в цій таблиці і може передавати привілеї іншим користувачам в цій таблиці.
Привілеї, які можна призначити користувачу:
SELECT Користувач з цим привілеєм може виконувати запити в таблиці.
INSERT Користувач з цим привілеєм може виконувати команду INSERT в таблиці.
UPDATE Користувач з цим привілеєм може виконувати команду UPDATE на таблиці. Ви можете обмежити цей привілей для певних стовпців таблиці.
DELETE Користувач з цим привілеєм може виконувати команду DELETE в таблиці.
REFERENCES Користувач з цим привілеєм може визначити зовнішній ключ, який використовує один або більше стовпців цієї таблиці, як батьківський ключ. Ви можете обмежити цей привілей для певних стовпців. (Дивіться Главу 19 для подробиць щодо зовнішнього ключа і батьківського ключа.)
Крім того, ви зіткнетеся з нестандартними привілеями об'єкта, такими, наприклад як INDEX. дає право створювати індекс в таблиці, SYNONYM. дає право створювати синонім для об'єкта, який буде пояснений в Главі 23, іALTER. дає право виконувати команду ALTER TABLE в таблиці. Механізм SQL призначає користувачам ці привілеї за допомогою командиGRANT.
команда grant
Дозвольте припустити, що користувач Diane має таблицю Замовників і хоче дозволити користувачеві Adrian виконати запит до неї. Diane повинна, в цьому випадку ввести наступну команду:
GRANT SELECT ON Customers TO Adrian;
Тепер Adrian може виконати запити до таблиці Замовників. Без інших привілеїв, він може тільки вибрати значення; але не може виконати будь-яка дія, які б впливало на значення в таблиці Замовників (включаючи використання таблиці Замовників як батьківської таблиці зовнішнього ключа, що обмежує зміни, які можна виконувати зі значеннями в таблиці Замовників).
Коли SQL отримує команду GRANT, він перевіряє привілеї користувача, який подав цю команду, щоб визначити, чи припустима команда GRANT.
Adrian самостійно не може видати цю команду. Він також не може надати право SELECT іншому користувачеві: таблиця ще належить Diane (пізніше ми покажемо, як Diane може дати право Adrian надавати SELECT іншим користувачам).
Синтаксис - той же самий, що і для надання інших привілеїв. Якщо Adrian - власник таблиці Продавців, то він може дозволити Diane вводити в неї рядки за допомогою наступного речення
GRANT INSERT ON Salespeople TO Diane;
Тепер Diane має право поміщати нового продавця в таблицю.