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

         

Правка обычных полей


Раньше мы рассмотрели некоторые возможности правки меток, задающих секретность строк (и возможности в виде исключения обходить запреты на правку). А что касается возможностей править обычные поля таблицы, строки которой защищены метками секретности?

Свойство доступа к обычным полям (не к служебному полю секретности строки), ранее использованное, называлось READ_CONTROL. Уточним поведение этого свойства.

Выдадим:

@userprivilege employee ''

@phonepolicyoptions 'read_control'

Продолжим:

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

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

9 rows selected.

SQL> UPDATE scott.phone 2 SET pno = pno

3 WHERE 4 empno 5 = ( SELECT empno FROM scott.emp WHERE ename = 'ALLEN' );

1 row updated.

SQL> save updateallenpnumber

Created file updateallenpnumber.sql

SQL> @updateallen OPEN

1 row updated.



SQL> @updateallen LIMITED

1 row updated.

SQL> @updateallen OPEN

0 row updated.

SQL> @updateallenpnumber

0 row updated.

Пока ничего нового относительно меток (пользователю EMPLOYEE, как это и было раньше, позволено "играть" только "на повышение" секретности), а что касается обычных полей разрешенных ему строк, то правка, как показывает пример, возможна.

Однако в нашем распоряжении имеются и другие свойства меток в конкретной таблице, например:

  • INSERT_CONTROL,
  • UPDATE_CONTROL,
  • DELETE_CONTROL,
  • WRITE_CONTROL.
  • Рассмотрим для примера свойство UPDATE_CONTROL. Выдадим:

    @phonepolicyoptions 'update_control'

    Повторим проверку:

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

    ENAME PNO ---------- -------------------- ALLEN 882-3154 WARD 610-1718 MARTIN 103-1983 BLAKE 193-3112 CLARK 310-2673 KING 542-6672 TURNER 293-1398 JAMES 932-6728 MILLER 865-6706

    9 rows selected.

    SQL> @updateallen OPEN

    1 row updated.

    SQL> @updateallenpnumber

    1 row updated.

    SQL> @updateallen LIMITED

    unauthorized SQL statement for policy


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

             

    unauthorized SQL statement for policy


    1 row updated.

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

    ... ... ... ...

    SQL> @updateallenpnumber

    UPDATE scott.phone * ERROR at line 1: ORA-12406: unauthorized SQL statement for policy EMPSEC_POLICY

    ... ... ... ...

    Факт налицо: включение UPDATE_CONTROL не изменило наши возможности по изменению метки, однако ж обычные поля запретных для него строк он править уже не в состоянии. Заметьте, что это коснулось только правки, но не чтения. Чтобы вновь защитить обычные поля от прочтения, достаточно выдать:

    @phonepolicyoptions 'update_control, read_control'

    Доказательство:

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

    ENAME PNO ---------- -------------------- ALLEN 882-3154 WARD 610-1718 MARTIN 103-1983 BLAKE CLARK KING

    TURNER 293-1398 JAMES 932-6728 MILLER 865-6706

    9 rows selected.

    Свойства INSERT_CONTROL и DELETE_CONTROL аналогичны рассмотренному UPDATE_CONTROL. Свойство же WRITE_CONTROL введено для удобства и обозначает INSERT_CONTROL + UPDATE_CONTROL + DELETE_CONTROL. Это легко обнаруживается следующим образом. Продолжим:

    SQL> @showoptions

    POLICY_NAME SCHEMA_NAME TABLE_NAME TABLE_OPTIONS ---------------------- ------------ ------------ --------------- EMPSEC_POLICY SCOTT EMP READ_CONTROL, LABEL_DEFAULT EMPSEC_POLICY SCOTT PHONE READ_CONTROL, UPDATE_CONTROL

    А теперь выдадим:

    @phonepolicyoptions 'write_control, read_control'

    Снова проверим свойства («особенности») применения нашей политики к конкретным таблицам:

    SQL> @showoptions

    POLICY_NAME SCHEMA_NAME TABLE_NAME TABLE_OPTIONS ---------------------- ------------ ------------ --------------- EMPSEC_POLICY SCOTT EMP READ_CONTROL, LABEL_DEFAULT EMPSEC_POLICY SCOTT PHONE READ_CONTROL, INSERT_CONTROL, UPDATE_CONTROL, DELETE_CONTROL


    Содержание раздела






    Содержание раздела