В предыдущей статье оговаривалось, что служебный столбец, добавленный в результате применения политики к таблице, можно скрыть от пользователей. Покажем, как это сделать. Выдадим в 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.