Lab_03_Oracle (Grant Revoke) (1) / Theory_Grant_Revoke_Dict (3_Oracle)
.pdf1. Керування доступом (теоретичні відомості)
1.1. Основні команди керування доступом до БД
Права доступу до об'єкта бази даних (базової таблиці, подання, індекса) має тільки власник (творець) об'єкта. Власник об'єкта може надавати права доступу до об'єкта іншим користувачам за допомогою речення GRANT, що має формат:
GRANT список_привілеїв ON об'єкт TO список_користувачів;
У списку привілеїв може бути зазначене ALL PRIVILEGES або значення з ряду: SELECT, DELETE, INSERT і UPDATE [(стовпці)], що дозволяють відповідно зчитувати (виконувати будь-які операції, в яких використовується SELECT), видаляти, додавати або змінювати рядки зазначеної таблиці (зміну можна обмежити конкретними стовпцями).
Наприклад:
GRANT ALL PRIVILEGES ON location TO stud01,stud02,stud03; GRANT SELECT,UPDATE(salary,commission) ON employee TO
stud11;
Надані привілеї (всі або деякі з них) можуть згодом бути скасовані. Скасування здійснюється за допомогою речення REVOKE, формат якого:
REVOKE список_привілеїв ON об'єкт FROM список_користувачів;
Наприклад:
REVOKE ALL PRIVILEGES ON employee, location FROM stud11;
REVOKE UPDATE ON location FROM stud01, stud03;
1.2. Системні й об'єктні привілеї
Системні привілеї
Системні привілеї можна призначити за допомогою команди GRANT. У табл. 1.1 приведений список системних привілеїв та операцій, що авторизуються цими привілеями.
|
Таблиця 1.1 |
Системні привілеї |
|
|
|
Системний привілей |
Дозволяє |
|
|
1 |
2 |
|
|
ALTER ANY CLUSTER |
Змінювати будь-який кластер у будь-якій схемі |
|
|
ALTER ANY INDEX |
Змінювати будь-який індекс у будь-якій схемі |
|
|
ALTER ANY PROCEDURE |
Змінювати будь-яку збережену процедуру, функцію |
|
або пакет у будь-якій схемі |
|
|
ALTER ANY ROLE |
Змінювати будь-яку роль у базі даних |
|
|
ALTER ANY SEQUENCE |
Змінювати будь-яку послідовність у будь-якій схемі |
|
|
ALTER ANY SNAPSHOT |
Змінювати будь-який знімок у будь-якій схемі |
|
|
ALTER ANY TABLE |
Змінювати будь-яку таблицю в будь-якій схемі |
|
|
ALTER ANY TRIGGER |
Включати, виключати й компілювати тригери в |
|
будь-якій схемі |
|
|
ALTER DATABASE |
Змінювати базу даних |
|
|
ALTER PROFILE |
Змінювати будь-який профіль у базі даних |
|
|
ALTER RESOURCE COST |
Установлювати вартості системних ресурсів |
|
|
ALTER ROLLBACK SEGMENT |
Змінювати сегменти відкоту |
|
|
ALTER SESSION |
Видавати речення ALTER SESSION |
|
|
ALTER SYSTEM |
Видавати речення ALTER SYSTEM |
|
|
ALTER TABLESPACE |
Змінювати табличні простори |
|
|
ALTER USER |
Змінювати інших користувачів: пароль, метод |
|
ідентифікації, квоти, табличні простори, |
|
призначати профілі й роли, що замовчуються, |
|
призначати квоти на БУДЬ-ЯКИЙ табличний |
|
простір |
|
|
ANALYZE ANY |
Аналізувати будь-яку таблицю, індекс або кластер |
|
у будь-якій схемі |
|
|
AUDIT ANY |
Виконувати аудит по будь-якому об'єкті в будь-якій |
|
схемі |
|
|
AUDIT SYSTEM |
Виконувати аудит речень SQL |
|
|
BECOME USER |
Ставати іншим користувачем. Використовується |
|
утилітою Import під час завантаження даних у |
|
схему іншого користувача |
|
|
BACKUP ANY TABLE |
Виконувати резервне копіювання будь-якої таблиці |
|
в будь-якій схемі за допомогою утиліти Export |
|
|
COMMENT ANY TABLE |
Створювати коментар по будь-якій таблиці, |
|
поданню або стовпцю в будь-якій схемі |
|
|
CREATE ANY CLUSTER |
Створювати кластер у будь-якій схемі |
|
|
CREATE ANY INDEX |
Створювати будь-який індекс у будь-якій схемі |
|
|
CREATE ANY PROCEDURE |
Створювати збережені процедури, функції й |
|
|
Системний привілей |
Дозволяє |
|
|
1 |
2 |
|
|
|
пакети в будь-якій схемі |
|
|
CREATE ANY SEQUENCE |
Створювати послідовність у будь-якій схемі |
|
|
CREATE ANY SNAPSHOT |
Створювати знімок у будь-якій схемі. Вимагає |
|
також привілею CREATE ANY TABLE |
|
|
CREATE ANY SYNONYM |
Створювати синонім у будь-якій схемі |
|
|
CREATE ANY TABLE |
Створювати таблицю в будь-якій схемі. Власник |
|
схеми, що містить таблицю, повинен мати квоту у |
|
відповідному табличному просторі |
|
|
CREATE ANY TRIGGER |
Створювати в будь-якій схемі тригер, |
|
асоційований з будь-якою таблицею в будь-якій |
|
схемі |
|
|
CREATE ANY VIEW |
Створювати подання в будь-якій схемі |
|
|
CREATE CLUSTER |
Створювати кластери у своїй схемі |
|
|
CREATE DATABASE LINK |
Створювати особисті зв'язки баз даних у своїй |
|
схемі |
|
|
CREATE INDEX |
Створювати індекс у своїй схемі по будь-якій |
|
таблиці в цій же схемі |
|
|
CREATE PROCEDURE |
Створювати збережені процедури, функції й |
|
пакети у своїй схемі |
|
|
CREATE PROFILE |
Створювати профілі |
|
|
CREATE PUBLIC DATABASE |
Створювати загальні зв'язки баз даних |
LINK |
|
|
|
CREATE PUBLIC SYNONYM |
Створювати загальні синоніми |
|
|
CREATE ROLE |
Створювати ролі |
|
|
CREATE ROLLBACK |
Створювати сегменти відкоту |
SEGMENT |
|
|
|
CREATE SESSION |
З'єднуватися з базою даних |
|
|
CREATE SEQUENCE |
Створювати послідовності у своїй схемі |
|
|
CREATE SNAPSHOT |
Створювати знімки у своїй схемі. Вимагає також |
|
привілею CREATE TABLE |
|
|
CREATE SYNONYM |
Створювати синоніми у своїй схемі |
|
|
CREATE TABLE |
Створювати таблиці у своїй схемі. Потрібна також |
|
UNLIMITED TABLESPACE або квота на табличний |
|
простір |
|
|
CREATE TABLESPACE |
Створювати табличні простори |
|
|
CREATE TRIGGER |
Створювати тригери у своїй схемі |
|
|
CREATE USER |
Створювати користувачів, призначати квоту на |
|
БУДЬ-ЯКИЙ табличний простір, установлювати що |
|
умовчує й тимчасове табличні простори, |
|
призначати профіль як частина CREATE USER |
|
|
Системний привілей |
Дозволяє |
|
|
1 |
2 |
|
|
CREATE VIEW |
Створювати подання у своїй схемі |
|
|
DELETE ANY TABLE |
Видаляти рядки з будь-якої таблиці, подання або |
|
знімка в будь-якій схемі |
|
|
DROP ANY CLUSTER |
Видаляти будь-який кластер у будь-якій схемі |
|
|
DROP ANY INDEX |
Видаляти будь-який індекс у будь-якій схемі |
|
|
DROP ANY PROCEDURE |
Видаляти збережені процедури, функції й пакети в |
|
будь-якій схемі |
|
|
DROP ANY ROLE |
Видаляти будь-яку роль у базі даних |
|
|
DROP ANY SEQUENCE |
Видаляти будь-яку послідовність в у будь-якій |
|
схемі |
|
|
DROP ANY SNAPSHOT |
Видаляти будь-який знімок у будь-якій схемі |
|
|
DROP ANY SYNONYM |
Видаляти будь-який синонім у будь-якій схемі, за |
|
винятком загальних синонімів |
|
|
DROP ANY TABLE |
Видаляти будь-яку таблицю в будь-якій схемі |
|
|
DROP ANY TRIGGER |
Видаляти будь-який тригер у будь-якій схемі |
|
|
DROP ANY VIEW |
Видаляти будь-який подання у будь-якій схемі |
|
|
DROP PROFILE |
Видаляти будь-який профіль у базі даних |
|
|
DROP PUBLIC DATABASE |
Видаляти загальні зв'язки баз даних |
LINK |
|
|
|
DROP PUBLIC SYNONYM |
Видаляти загальні синоніми |
|
|
DROP ROLLBACK SEGMENT |
Видаляти сегменти відкоту |
|
|
DROP TABLESPACE |
Видаляти табличні простори |
|
|
DROP USER |
Видаляти інших користувачів |
|
|
EXECUTE ANY PROCEDURE |
Виконувати будь-яку збережену процедуру, |
|
функцію або пакет, або звертатися до будь-якої |
|
загальної пакетованої змінної в будь-якій схемі |
|
|
FORCE ANY TRANSACTION |
Форсувати підтвердження або відкіт будь-якої |
|
розподіленої транзакції в локальній базі даних. |
|
Форсувати збій розподіленої транзакції |
|
|
FORCE TRANSACTION |
Форсувати підтвердження або відкіт своєї |
|
розподіленої транзакції в локальній базі даних |
|
|
GRANT ANY PRIVILEGE |
Призначати системні привілеї, навіть ті, котрими |
|
ви самі не володієте |
|
|
GRANT ANY ROLE |
Призначати будь-яку роль у базі даних |
|
|
INSERT ANY TABLE |
Вставляти рядки в будь-яку таблицю, подання або |
|
знімок у будь-якій схемі |
|
|
LOCK ANY TABLE |
Блокувати будь-яку таблицю або подання у будь- |
|
якій схемі |
|
|
MANAGE TABLESPACE |
Переводити табличний простір в он-лайн і оф- |
|
лайн, виконувати резервне копіювання табличного |
|
|
Системний привілей |
Дозволяє |
|
|
1 |
2 |
|
|
|
простору |
|
|
READUP |
Опитувати дані, що мають клас доступу вище, ніж |
|
мітка сесії. Цей привілей доступний тільки в |
|
Trusted ORACLE |
|
|
RESTRICTED SESSION |
З'єднуватися з базою даних, запущеної в режимі |
|
STARTUP RESTRICT |
|
|
SELECT ANY SEQUENCE |
Звертатися до будь-якої послідовності в будь-якій |
|
схемі |
|
|
SELECT ANY TABLE |
Опитувати будь-яку таблицю, подання або знімок у |
|
будь-якій схемі |
|
|
UNLIMITED TABLESPACE |
Використовувати необмежену пам'ять у БУДЬ- |
|
ЯКОМУ табличному просторі. Цей привілей |
|
перекриває будь-які квоти. Якщо ви відзиваєте цей |
|
привілей від користувача, то його об'єкти |
|
залишаються, але подальший розподіл пам'яті в |
|
табличних просторах буде дозволено тільки при |
|
наявності квоти на конкретний табличний простір. |
|
Цей привілей не можна призначати ролям |
|
|
UPDATE ANY TABLE |
Обновляти рядка в будь-якій таблиці, поданняі або |
|
знімку в будь-якій схемі |
|
|
TRUNCATE ANY |
Усікати будь-яку таблицю або кластер у будь-якій |
|
схемі |
|
|
WRITEDOWN |
Створювати, змінювати (alter) і видаляти об'єкти |
|
схем, а також вставляти, обновляти й видаляти |
|
рядки, що мають клас доступу нижче, ніж у мітки |
|
сесії. Цей привілей доступний тільки в Trusted |
|
ORACLE |
|
|
WRITEUP |
Створювати, змінювати (alter) і видаляти об'єкти |
|
схем, а також вставляти, обновляти й видаляти |
|
рядки, що мають клас доступу вище, ніж у мітки |
|
сесії. Цей привілей доступний тільки в Trusted |
|
ORACLE |
|
|
1.3. Ролі, визначені в ORACLE
Деякі ролі створюються автоматично самим ORACLE. Коли ви створюєте базу даних, ORACLE створює ці ролі й призначає їм певні системні привілеї. Табл. 1.2 перераховує всі визначені ролі і їхні системні привілеї.
|
Таблиця 1.2 |
|
Ролі, визначені в ORACLE |
||
|
|
|
Роль |
Призначені системні привілеї й ролі |
|
|
|
|
CONNECT |
ALTER SESSION |
|
|
CREATE CLUSTER |
|
|
CREATE DATABASE LINK |
|
|
CREATE SEQUENCE |
|
|
CREATE SESSION |
|
|
CREATE SYNONYM |
|
|
CREATE TABLE |
|
|
CREATE VIEW |
|
|
|
|
RESOURCE |
CREATE CLUSTER |
|
|
CREATE PROCEDURE |
|
|
CREATE SEQUENCE |
|
|
CREATE TABLE |
|
|
CREATE TRIGGER |
|
|
|
|
DBA |
Всі системні привілеї |
|
|
WITH ADMIN OPTION |
|
|
роль EXP_FULL_DATABASE |
|
|
роль IMP_FULL_DATABASE |
|
|
|
|
IMP_FULL_DATABASE |
SELECT ANY TABLE |
|
|
BACKUP ANY TABLE |
|
|
INSERT, UPDATE, DELETE |
|
|
по таблицях sys.incexp, |
|
|
sys.incvid, |
|
|
sys.incfil |
|
|
|
|
EXP_FULL_DATABASE |
BECOME USER |
|
|
WRITEDOWN (в Trusted ORACLE) |
|
|
|
|
Зауваження. Якщо ви призначаєте користувачеві роль RESOURCE або DBA, то ORACLE неявно призначає цьому користувачеві системний привілей UNLIMITED TABLESPACE.
Ролі CONNECT, RESOURCE і DBA надані для сумісності з попередніми версіями ORACLE. Скрипт SQL з ім'ям SQL.BSQ створює ці ролі, призначає їм привілеї і призначає роль DBA з опцією ADMIN OPTION користувачам SYS і SYSTEM. Цей скрипт доступний на вашому дистрибутивному носії, хоча його точне ім'я й місце розташування можуть варіюватися залежно від вашої операційної системи. Корпорація Oracle рекомендує, щоб ви спроектували свої
власні ролі для захисту бази даних, а не покладалися на визначені ролі. Ці ролі можуть втратити підтримку в майбутніх версіях ORACLE.
Ролі EXP_FULL_DATABASE і IMP_FULL_DATABASE надаються для зручності роботи з утилітами Import і Export. Скрипт SQL з ім'ям CATEXP.SQL створює ці ролі, призначає їм привілеї і призначає ці ролі визначеної ролі DBA. Цей скрипт доступний на вашому дистрибутивному носії, хоча його точне ім'я й місце розташування можуть варіюватися залежно від вашої операційної системи.
1.4. Об'єктні привілеї
Кожний об'єктний привілей, що вам призначається, дозволяє вам виконувати певні операції над зазначеним об'єктом. Табл. 1.3 перераховує об'єктні привілеї, які можуть призначатися за кожним типом об'єкта.
Таблиця 1.3
Об'єктні привілеї
Об'єктний |
|
Процедури |
|
|
Таблиці Подання Послідовності |
Функції |
Знімки |
||
привілей |
||||
|
Пакети |
|
||
|
|
|
ALTER
DELETE
EXECUTE
INDEX
INSERT
REFERENCES
SELECT
UPDATE
1.5. Синтаксис і приклади використання команд керування доступом
Команда CREATE ROLE створює роль.
Для створення ролі ви повинні мати системний привілей CREATE
ROLE.
Синтаксис: CREATE ROLE команда ::=
де РОЛЬ – ім'я створюваної ролі. Корпорація Oracle рекомендує, щоб РОЛЬ містила хоча б один однобайтовий символ, навіть якщо набір символів бази даних містить також мультибайтові символи;
NOT IDENTIFIED указує, що користувача, якому призначена роль, не потрібно перевіряти при включенні цієї ролі;
IDENTIFIED указує, що користувача, якому призначена роль, потрібно перевіряти при включенні цієї ролі командою SET ROLE:
BY пароль – користувач повинен повідомити ORACLE пароль при включенні ролі. Пароль може містити тільки однобайтові символи з набору символів бази даних, навіть якщо цей набір містить також мультибайтові символи;
EXTERNALLY – операційна система перевіряє користувача, що включає роль. Залежно від операційної системи від користувача може знадобитися вказівка пароля при включенні ролі.
Якщо ви опускаєте обидві опції NOT IDENTIFIED і IDENTIFIED, то за замовчуванням приймається NOT IDENTIFIED.
1.5.1. Зауваження щодо використання
РОЛЬ – це сукупність привілеїв, що може призначатися користувачам або іншим ролям. Ви можете використовувати ролі, щоб адмініструвати привілеї бази даних. Ви можете додати привілей в область привілеїв, обумовлену роллю, а потім призначити цю роль користувачеві. Після цього користувач може включити цю роль і тим самим одержати привілеї, обумовлені доменом привілеїв даної ролі. Для інформації про те, як включати ролі, зверніться до команди ALTER USER вище в цьому розділі.
Домен привілеїв ролі містить усі привілеї, призначені цій ролі, а також усі привілеї в доменах інших ролей, які були призначені даній ролі. Домен привілеїв нової ролі спочатку порожній. Ви можете додати привілеї в домен привілеїв ролі за допомогою команди GRANT.
Коли ви створюєте роль, ORACLE призначає вам цю роль із опцією ADMIN OPTION. Ця опція дозволяє вам виконувати наступні операції:
призначати цю роль іншому користувачеві або ролі; відзивати цю роль від іншого користувача або ролі;
змінювати цю роль, щоб змінити авторизацію, що потрібно для доступу до неї;
видалити цю роль.
1.5.2. Ролі ORACLE
Деякі ролі визначаються скриптами SQL, які надані на вашому дистрибутивному носії. Наступні ролі є визначеними в ORACLE:
CONNECT
RESOURCE DBA
EXP_FULL_DATABASE
IMP_FULL_DATABASE
Ролі CONNECT, RESOURCE і DBA передбачені для сумісності з попередніми версіями ORACLE. Корпорація Oracle рекомендує вам спроектувати ваші власні ролі для захисту бази даних, замість того щоб покладатися на визначені ролі. Ці ролі можуть перестати підтримуватися в майбутніх версіях ORACLE.
Ролі EXP_FULL_DATABASE і IMP_FULL_DATABASE надаються для зручності роботи з утилітами Import і Export.
ORACLE також створює інші ролі, які дають вам повноваження для адміністративного керування базою даних. На багатьох операційних системах ці ролі називаються OSOPER і OSDBA. У вашій операційній системі ці імена можуть бути іншими.
Приклад. Наступне речення створює роль TELLER:
CREATE ROLE teller IDENTIFIED BY cashflow
Користувачі, яким буде призначена роль TELLER, повинні будуть специфікувати пароль CASHFLOW, щоб включити цю роль.
1.6. CREATE ROLLBACK SEGMENT
Призначення. Створює сегмент відкоту. СЕГМЕНТ ВІДКОТУ – це об'єкт, що використовується ORACLE для зберігання даних, необхідних для скасування змін, здійснюваних транзакціями.
Умови. Ви повинні мати системний привілей CREATE ROLLBACK SEGMENT. Крім того, ви повинні мати або квоту в табличному просторі, в якому створюється сегмент відкоту, або системний привілей UNLIMITED TABLESPACE.
Синтаксис. CREATE ROLLBACK SEGMENT команда ::=
де PUBLIC – указує, що сегмент відкоту ЗАГАЛЬНИЙ і доступний будь-якій інстанції. Якщо ця опція опущена, то сегмент відкоту ОСОБИСТИЙ, і буде доступний тільки тієї інстанції, що вкаже його ім'я в параметрі ініціалізації ROLLBACK_SEGMENTS;
сегмент_відкоту – ім'я створюваного сегмента відкоту; TABLESPACE – ідентифікує табличний простір, у якому
створюється сегмент відкоту. Якщо ця опція опущена, ORACLE створює сегмент відкоту в табличному просторі SYSTEM;
STORAGE – специфікує характеристики пам'яті для сегмента відкоту.
Зауваження щодо використання
Табличний простір повинен бути в он-лайні, коли в ньому створюється сегмент відкоту.
Коли ви створюєте сегмент відкоту, він спочатку перебуває в стані офлайн. Щоб зробити його доступним для транзакцій вашої інстанції ORACLE, ви повинні перевести його в он-лайн одним із наступних способів:
командою ALTER ROLLBACK SEGMENT;
через параметр ініціалізації ROLLBACK_SEGMENTS. Табличний простір може мати кілька сегментів відкоту. У
загальному випадку, множинні сегменти відкоту поліпшують продуктивність.