Базы данных Oracle - статьи



   гаджет корзина для 7             

Изменение метки в качестве исключения из правила


Итак, если мы применяем политику секретности к таблице и указываем при этом режим 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'




    Содержание  Назад  Вперед