Изучаем метки доступа к строкам: задание свойств столбца доступа в таблице Oracle - Исчезающий столбец
ОГЛАВЛЕНИЕ
Исчезающий столбец
В предыдущей статье оговаривалось, что служебный столбец, добавленный в результате применения политики к таблице, можно скрыть от пользователей. Покажем, как это сделать. Выдадим в SQL*Plus:
@phonepolicyoptions 'read_control, hide'
Проверка:
SQL> COLUMN POLICY_NAME FORMAT A22
SQL> COLUMN SCHEMA_NAME FORMAT A12
SQL> COLUMN TABLE_NAME FORMAT A12
SQL> COLUMN TABLE_OPTIONS FORMAT A15 WORD
SQL> SELECT policy_name, schema_name, table_name, table_options
2 FROM dba_sa_table_policies;
POLICY_NAME SCHEMA_NAME TABLE_NAME TABLE_OPTIONS
---------------------- ------------ ------------ --------------
EMPSEC_POLICY SCOTT EMP READ_CONTROL,
LABEL_DEFAULT
EMPSEC_POLICY SCOTT PHONE READ_CONTROL,
HIDE
SQL> SAVE showoptions
Создано file showoptions.sql
SQL> CONNECT employee/employee
Соединено.
SQL> SELECT column_name FROM all_tab_columns
2 WHERE owner = 'SCOTT' AND table_name = 'PHONE';
COLUMN_NAME
------------------------------
EMPNO
PNO
SQL> SAVE showcolumns
Создано file showcolumns.sql
SQL> CONNECT head/head
Соединено.
SQL> /
COLUMN_NAME
------------------------------
EMPNO
PNO
Обратите внимание: столбец EMPSEC_LABEL стал невидим, то есть ни у хозяина таблицы, ни у пользователей не стало причин догадываться, что им предъявляется только часть строк ! Дополнительной скрытности добавляет то обстоятельство, что даже SYS не увидит скрытого столбца (проверьте это !) А вот для сравнения, что будет, если свойство HIDE «уберем» (то есть не укажем):
@phonepolicyoptions 'read_control'
Проверка:
SQL> CONNECT head/head
Соединено.
SQL> @showcolumns
COLUMN_NAME
------------------------------
EMPNO
PNO
EMPSEC_LABEL
Обратите внимание на то, что когда столбец EMPSEC_LABEL был невидим, это обстоятельство не помешало администратору Label Security (пользователю LBACSYS) обратиться к столбцу командой UPDATE scott.phone SET empsec_label = ... в файле phonepolicyoptions.sql.