Итак, если мы применяем политику секретности к таблице и указываем при этом режим LABEL_UPDATE использования меток, обычные пользователи теряют возможность эти метки конкретных строк изменять. Однако для каких-то пользователей Label Security позволяет сделать исключение. Для этого используются специальные привилегии. В отличие от традиционных привилегий Oracle (системных и объектных) они носят не разрешающий характер (a priori ничего делать нельзя, а все, что можно, специально разрешено привилегиями), а характер преодоления явно указанного запрета (определенные действия явно запрещены, но в виде исключения допускаются); именно для них и естественно сказать: "привилегии", в то время как для традиционных "привилегий" просится более подходящее слово "полномочия". Вот их названия:
WRITEUP,
WRITEDOWN,
WRITEACROSS.
Выдаются они не командой GRANT, а с помощью специальной процедуры SET_USER_PRIVS из пакета SA_USER_ADMIN. Это к сожалению, но отчасти разработчиков можно понять: эти привилегии даются пользователям в рамках конкретных политик, коих может иметься много.
Выдадим привилегию 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, позволяет сделать для него исключение и «играть на повышение».
В отличие от своих возможных коллег по доступу к ограниченной информации, пользователь 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. Продолжим:
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, не сводящееся к выбору какой-нибудь одной из них.
В отличие от своих возможных коллег по доступу к ограниченной информации, пользователь 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. Продолжим:
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, не сводящееся к выбору какой-нибудь одной из них.