Изменение метки в качестве исключения из правила
Итак, если мы применяем политику секретности к таблице и указываем при этом режим 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
... ... ... ...
Привилегия WRITEUP, выданная пользователю HEAD, позволяет сделать для него исключение и «играть на повышение».
Выдадим:
@userprivilege head 'writedown'
Проверка действия привилегии WRITEDOWN:
SQL> CONNECT head/head Connected. SQL> @updateallen LIMITED
1 row updated.
SQL> @updateallen OPEN
1 row updated.
SQL> @updateallen LIMITED
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, не сводящееся к выбору какой-нибудь одной из них.
Проверка действия привилегии WRITEDOWN:
SQL> CONNECT head/head Connected. SQL> @updateallen LIMITED
1 row updated.
SQL> @updateallen OPEN
1 row updated.
SQL> @updateallen LIMITED
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, не сводящееся к выбору какой-нибудь одной из них.
Содержание раздела