Вивчаємо мітки доступу до рядків в Oracle: спеціальні привілеї для обраних, Криптографія, Security & Hack, статті

попередня стаття серії

“Таргани вдавалися,
Всі склянки випивали,
А комашки –
По три чашки
З молоком
І пиріжком … “

Корній Чуковський, “Муха-Цокотуха”


Зміст



Анотація


Ця стаття є безпосереднім продовженням статті “Вивчаємо мітки доступу до рядків: завдання властивостей стовпця доступу в таблиці“, І розглядає деякі додаткові властивості засобу Label Security в Oracle, відповідні мандатної доступу. Саме, показана можливість долати в індивідуальному порядку заборони на зміни міток, сформульовані для груп доступу


Припускаються у статті стан бази та сценарні файли відповідають кінця попередньої статті.


Персональні привілеї для обраних користувачів


Зміна мітки як виключення з правила


Отже, якщо ми застосовуємо політику секретності до таблиці і вказуємо при цьому режим LABEL_UPDATE використання міток, звичайні користувачі втрачають можливість ці мітки конкретних рядків змінювати. Однак для якихось користувачів Label Security дозволяє зробити виключення. Для цього використовуються спеціальні привілеї. На відміну від традиційних привілеїв Oracle (системних і об’єктних) вони носять не дозволяє характер (a priori нічого робити не можна, а все, що можна, спеціально дозволено привілеями), а характер подолання явно зазначеного заборони (певні дії явно заборонені, але як виняток допускаються); саме для них і природно сказати: “привілеї”, в той час як для традиційних “привілеїв” проситься більш відповідне слово “повноваження”. Ось їх назви:


– WRITEUP,
– WRITEDOWN,
– WRITEACROSS.


Видаються вони не командою GRANT, а за допомогою спеціальної процедури SET_USER_PRIVS з пакету SA_USER_ADMIN. Це на жаль, але частково розробників можна зрозуміти: ці привілеї даються користувачам в рамках конкретних політик, яких може матися багато.


Підготуємо файл userprivilege.sql:







CONNECT lbacsys/lbacsys


BEGIN
SA_USER_ADMIN.SET_USER_PRIVS
(

POLICY_NAME   =>   “empsec_policy”
, USER_NAME   =>   “&1”
, PRIVILEGES  =>   “&2”
);
END;
/


Видамо привілей WRITEUP і поспостерігаємо, як зміняться можливості користувача HEAD щодо зміни значень позначок за наявності у таблиці PHONE режиму LABEL_UPDATE їх використання:


SQL> @userprivilege head “writeup”
Connected.


PL/SQL procedure successfully completed.


SQL> CONNECT head/head
Connected.
SQL> @updateallen OPEN


1 row updated.


SQL> @updateallen LIMITED


1 row updated.


SQL> @updateallen OPEN
UPDATE scott.phone
*
ERROR at line 1:
ORA-12406: unauthorized SQL statement for policy EMPSEC_POLICY
… … … …


Користувач HEAD як виняток отримав право знижувати секретність, але не підвищувати.


Видамо:


@userprivilege head “writeacross”


Перевірка дії привілеї WRITEACROSS:


SQL> CONNECT head/head
Connected.
SQL> @updateallen LIMITED


1 row updated.


SQL> @updateallen OPEN


1 row updated.


SQL> @updateallen LIMITED


1 row updated.


На відміну від своїх можливих колег з доступу до обмеженої інформації, користувач HEAD тепер може як підвищувати, так і знижувати секретність рядка.


Наступний запит дозволяє перевірити наявність привілеїв подолання заборони змінювати мітки:


SQL> COLUMN USER_NAME FORMAT A15
SQL> COLUMN USER_PRIVILEGES FORMAT A20
SQL> SELECT * FROM DBA_SA_USER_PRIVS;
















USER_NAME POLICY_NAME USER_PRIVILEGES
HEAD EMPSEC_POLICY WRITEACROSS 

Для того, щоб вилучити у користувача привілей, буде потрібно не видати звичну команду REVOKE, а опустити значення (проставити NULL) в параметрі PRIVILEGES процедури SET_USER_PRIVS. Продовжимо:


SQL> SAVE showprivs
Created file showprivs.sql


SQL> @userprivilege head ” “
Connected.


PL/SQL procedure successfully completed.


SQL> @showprivs


no rows selected


SQL> CONNECT head/head
Connected.
SQL> @updateallen LIMITED


1 row updated.


SQL> @updateallen OPEN
UPDATE scott.phone
*
ERROR at line 1:
ORA-12406: unauthorized SQL statement for policy EMPSEC_POLICY
… … … …


Користувач HEAD втратив можливість змінювати мітку – за наявності у таблиці режиму LABEL_UPDATE роботи з мітками.


У нашому прикладі WRITEACROSS, здавалося б, замінює WRITEUP + WRITEDOWN, але в загальному випадку (наприклад, при структурної мітці) всі три привілеї самодостатні. У загальному випадку можливо і набуває сенсу комбінування привілеїв WRITEUP, WRITEDOWN і WRITEACROSS, не зводиться до вибору якоїсь однієї з них.


Інші привілеї


Крім трьох вказаних привілеїв, пов’язаних із забороною LABEL_UPDATE використання міток, є і деякі інші:


– READ,
– FULL,
– COMPACCESS,
– PROFILE_ACCESS.


Обмежимося тут аналізом першої з них. Решта нададуть ефект тільки при більш складної організації доступу, тут не розглядається, наприклад, при наявності структурних міток.


Привілей READ дає можливість її власникові подолати заборону на читання рядків з боку чинної політики. Продовжимо:


SQL> CONNECT employee/employee
Connected.
SQL> @phones





































ENAME PNO
ALLEN  
WARD 610-1718
MARTIN 103-1983
BLAKE  
CLARK  
KING  
TURNER 293-1398
JAMES 932-6728
MILLER 865-6706

9 rows selected.


SQL> @userprivilege employee “read”
Connected.


PL/SQL procedure successfully completed.


SQL> @showprivs




















USER_NAME POLICY_NAME USER_PRIVILEGES
EMPLOYEE EMPSEC_POLICY READ 
HEAD EMPSEC_POLICY WRITEACROSS

SQL> CONNECT employee/employee
Connected.
SQL> @phones




















































ENAME PNO
SMITH 665-7282
ALLEN 882-3154
WARD 610-1718
JONES 100-6539
MARTIN 103-1983
BLAKE 193-3112
CLARK 310-2673
SCOTT 680-4853
KING 542-6672
TURNER 293-1398
ADAMS 278-5105
JAMES 932-6728
FORD 485-9127
MILLER 865-6706

14 rows selected.


Назва привілеї READ не повинно викликати ілюзій: у нашому випадку вона дозволяє не тільки читати рядки, включаючи поле мітки, а й змінювати. Для доказу цього факту продовжимо (від імені EMPLOYEE):


SQL> @updateallen OPEN


1 row updated.


SQL> @updateallen LIMITED


1 row updated.

наступна стаття серії


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



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


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

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

Ваш отзыв

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

*

*