Користувач або схема?, Oracle, Бази даних, статті

СУБД Oracle, як і всі її реальні конкуренти – стара система. Недавно святкували її 25-річчя. Таке довголіття було б неможливо без низки технічних рішень, вдало (з цієї точки зору) запропонованих ще в стародавні часи. Але поряд з цим в системі є і приклади дефектів початкового проектування. Колись вони не здавалися такими, а потім виправляти їх стало дуже складно, так що тільки в самих останніх версіях, наприклад в 9-ой, стали промацуватися шляхи вирішення ненавмисно запрограмованої проблеми. Такою є проблема “користувачів” і “схем”.

Проблема

В Oracle поняття “схема” і “користувач” нероздільно злилися воєдино. Формально два різні слова “user” і “schema” використовуються в Oracle для позначення одного і того ж: “схеми-користувача”. Документація на цей рахунок сором’язливо каже, що “при закладі користувача [за допомогою пропозиції CREATE USER – автор] автоматично створюється схема з таким же ім’ям”. З іншого боку, окремих маніпуляцій зі схемами в Oracle не передбачено (команда CREATE SCHEMA в Oracle оманлива, вона не створює схему, як можна було б подумати), от і виходить, в системі понять Oracle “схема” = “користувач”.

Для розробника ж ці два поняття не ідентичні. Так, схема являє собою свого роду контейнер збережених в БД об’єктів, що несе традиційно подвійну функціональне навантаження: як засоби організації даних (об’єктів в базі багато, але не всім додаткам всі вони цікаві) і як засіб захисту даних від сторонніх додатків. Користувач же, за своєю початкової ідеї – це конкретна особа, яка може підключатися до СУБД для роботи з тими чи іншими даними, перевірятися на наявність повноважень, контролюватися на предмет скоєних дій і т. д.

Дані належать інформаційній системі, підприємству, а користувачі можуть найматися і звільнятися. Як зімітувати такий спосіб роботи в Oracle?

Рішення

Можливо, хтось вже придумав своє рішення цієї проблеми. Якщо ні – можна скористатися запропонованим нижче.

(1)

Для зберігання об’єктів “відділу кадрів” створюємо схему (-користувача) HR:



CREATE USER hr IDENTIFIED BY hr;

Далі в міру необхідного уточнюємо всі властивості цієї схеми, наприклад:



ALTER USER hr DEFAULT TABLESPACE hr_ts DEFAULT TABLESPACE temp, і так далі.

(2)

Для фізичних осіб створюємо користувачів Oracle, наприклад:



CREATE USER pete IDENTIFIED BY thisismepete;
CREATE USER mary IDENTIFIED BY maryiam;

Далі користувачам потрібно приписати необхідні властивості. У типовому випадку всі вони однакові, так що має сенс написати один-єдиний сценарій, який наділяв би кожного нового “Петю” або “Машу” необхідними повноваженнями. Що туди повинно входити? Як мінімум, системна привілей CREATE SESSION. Але крім цього, для доступу до своїх таблиць від імені HR слід видати щось на зразок



GRANT SELECT, INSERT, UPDATE, DELETE ON main_hr_table TO pete;

(3)

Це ще не все. Користувач PETE дійсно тепер зможе підключатися до СУБД від свого імені і працювати з таблицею MAIN_HR_TABLE, однак посилатися на неї він буде змушений за повним імені: HR.MAIN_HR_TABLE, так як це не його таблиця. Чи можна уникнути цього і змусити його відчувати себе “як вдома”? Можна. Йому достатньо видати:



ALTER SESSION SET CURRENT_SCHEMA=hr;

Зручніше, проте, цю команду “загорнути” в тригер, що спрацьовує при підключенні до “схемою” PETE, тобто видати, наприклад, від імені SYS:



CREATE OR REPLACE TRIGGER set_hr_schema_for_pete
AFTER LOGON ON pete.SCHEMA
BEGIN
EXECUTE IMMEDIATE “ALTER SESSION SET
CURRENT_SCHEMA=hr”;
END;
/

Тепер, підключаючись до СУБД, користувач PETE буде бачити об’єкти HR “як свої”, за коротким імені, правда свої власні таблиці він змушений буде називати “цілком”, наприклад PETE.MY_PETE_TABLE, але нам, здається, це й не важливо.

Особливості запропонованого рішення



– Його треба автоматизувати
– Неможливо створювати і видаляти об’єкти
– Можна використовувати системний аудит

Альтернатива

Запропоновано в Oracle 9.0: “корпоративні користувачі” і сервер імен.


Посилання по темі

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*