4. ラベルデータの処理とラベル列の非表示

4. ラベルデータの処理とラベル列の非表示#

この手順では、データラベルを使用した操作(絞り込み・ソート)と、ラベル列の非表示オプションを適用する方法を解説します。

データ・ラベルの表示#

見ていただくとわかる通りですが、ラベル列は数値として管理されるため、不等号を使用した条件で絞り込みが可能です。

SQL> select JOB_ID, OLS_LABEL_DEMO from HR.JOB_HISTORY_4OLS where OLS_LABEL_DEMO >= 300;

JOB_ID     OLS_LABEL_DEMO
---------- --------------
AC_ACCOUNT            300
AC_MGR                400
MK_REP                300
SA_REP                300
SA_MAN                400
AC_ACCOUNT            300

6 rows selected.

ラベル列を基準にORDER BYでデータをソートすることも可能です。

SQL> select JOB_ID, OLS_LABEL_DEMO from HR.JOB_HISTORY_4OLS order by OLS_LABEL_DEMO;

JOB_ID     OLS_LABEL_DEMO
---------- --------------
IT_PROG               200
ST_CLERK              200
AD_ASST               200
ST_CLERK              200
AC_ACCOUNT            300
SA_REP                300
MK_REP                300
AC_ACCOUNT            300
SA_MAN                400
AC_MGR                400

10 rows selected.

ラベル列の非表示設定#

HIDEオプションを表に適用することで、ポリシーを表す列を非表示にするように選択できます。 しかし、この非表示設定は初回のポリシー適用時のみ可能ですので、すでにポリシーがある場合は一度ポリシーを削除する必要があります。

以下のSQLでポリシーを削除し、OLS_LABEL_DEMO列を表から削除します。

BEGIN
    SA_POLICY_ADMIN.REMOVE_TABLE_POLICY (
        policy_name     => 'OLS_POL_DEMO',
        schema_name     => 'HR',
        table_name      => 'JOB_HISTORY_4OLS',
        drop_column     => TRUE
    );
END;
/

ラベル列が削除されたことを確認します

SQL> desc HR.JOB_HISTORY_4OLS;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
EMPLOYEE_ID                               NOT NULL NUMBER(6)
START_DATE                                NOT NULL DATE
END_DATE                                  NOT NULL DATE
JOB_ID                                    NOT NULL VARCHAR2(10)
DEPARTMENT_ID                                      NUMBER(4)

HIDEオプションを使用してポリシーを再適用します。

BEGIN
    SA_POLICY_ADMIN.APPLY_TABLE_POLICY (
        policy_name    => 'OLS_POL_DEMO',
        schema_name    => 'HR',
        table_name     => 'JOB_HISTORY_4OLS',
        table_options  => 'READ_CONTROL, HIDE');
END;
/

ポリシーの適用後、ラベル列は非表示になっていることが分かります。

SQL> desc HR.JOB_HISTORY_4OLS;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
EMPLOYEE_ID                               NOT NULL NUMBER(6)
START_DATE                                NOT NULL DATE
END_DATE                                  NOT NULL DATE
JOB_ID                                    NOT NULL VARCHAR2(10)
DEPARTMENT_ID                                      NUMBER(4)

SQL> select * from HR.JOB_HISTORY_4OLS;

EMPLOYEE_ID START_DAT END_DATE  JOB_ID     DEPARTMENT_ID
----------- --------- --------- ---------- -------------
        102 13-JAN-11 24-JUL-16 IT_PROG               60
        101 21-SEP-07 27-OCT-11 AC_ACCOUNT           110
...

非表示設定でも、明示的に列名を指定すればラベル列を参照することができます。 (ここでは一度ポリシーを削除したため、再適用後のラベル列のデータは空になっています。)

SQL> select JOB_ID, OLS_LABEL_DEMO from HR.JOB_HISTORY_4OLS;

JOB_ID     OLS_LABEL_DEMO
---------- --------------
IT_PROG
AC_ACCOUNT
AC_MGR
MK_REP
...

手順2と同様のデータ挿入手順でラベルデータを挿入し直すと、ラベル列のデータも確認できることが分かります。

SQL> select JOB_ID, OLS_LABEL_DEMO from HR.JOB_HISTORY_4OLS;

JOB_ID     OLS_LABEL_DEMO
---------- --------------
IT_PROG               200
AC_ACCOUNT            300
AC_MGR                400
MK_REP                300
...

以上でOracle Label Securityの動作確認は終了です。次の手順では構築したOLSの設定を削除していきます。