Особенности защиты баз данных IBM DB2 и Oracle, страница 6

В следующем примере создаются четыре метки. Метка с номером 10000 фиксирует общий доступ к данным, независимо от отделений и групп. Остальные метки – доступ к конфиденциальной информации, при этом метка с номером 20200 – для пользователей отдела кадров западного региона, с номером 20400 – для пользователей финансового отдела восточного региона, с номером 30900 – для всех зарегистрированных отделений и всех регионов.

EXEC sa_label_admin.create_label('DOC_POLICY', '10000', 'PUBLIC', TRUE);
EXEC sa_label_admin.create_label('DOC_POLICY', '20200', 'CONFIDENTIAL:HR:WEST', TRUE);
EXEC sa_label_admin.create_label('DOC_POLICY', '20400', 'CONFIDENTIAL:FIN:EAST', TRUE);
EXEC sa_label_admin.create_label('DOC_POLICY', '30900', 'CONFIDENTIAL:HR,FIN:ALL', TRUE);

7. Прикрепление правил разграничения доступа к таблице.

Данный шаг необходим для того, чтобы установить для таблицы опцию контроля меточной безопасности. Пусть имеется таблица DOCUMENTS пользователя APP, к которой необходимо прикрепить правила DOC_POLICY. Для этого нужно воспользоваться процедурой sa_policy_admin.apply_table_policy, и вызов ее будет выглядеть следующим образом:

EXEC sa_policy_admin.apply_table_policy -
    ( policy_name    => 'DOC_POLICY' -
    , schema_name    => 'APP' -
    , table_name     => 'DOCUMENTS' -
    , table_options  => 'LABEL_DEFAULT,
                         READ_CONTROL,WRITE_CONTROL');

Опция LABEL_DEFAULT указывает, что в случае отсутствия явно указанной в DML-операторе метки строки следует устанавливать метку по умолчанию. Опция READ_CONTROL предписывает проверку доступа при выполнении операторов SELECT, UPDATE и DELETE; опция WRITE_CONTROL – при выполнении операторов INSERT, UPDATE и DELETE.

8. Назначение пользовательских меток.

Именно на этом шаге пользователям назначаются необходимые привилегии чтения и записи в рамках мандатной модели управления доступом. Для этих целей используется процедура sa_user_admin.set_user_labels, которая связывает правила доступа с пользователем, задает максимальные права на чтение и запись, минимальные права на запись и метки по умолчанию.

В следующем примере скрипта метки назначаются трем пользователям:

·  пользователю MGR даются максимальные права на чтение и запись (конфиденциальная информация, независимо от отделения и региона);

·  пользователю HR_EMP назначается уровень чтения-записи – конфиденциальная информация, документы отдела кадров западного региона;

·  пользователь EMP получает право чтения и записи всех общедоступных (PUBLIC) документов.

 
EXEC sa_user_admin.set_user_labels -
        ( policy_name     => 'DOC_POLICY' -
        , user_name       => 'MGR' -
        , max_read_label  => 'CONFIDENTIAL:HR,FIN:ALL' -
        , max_write_label => 'CONFIDENTIAL:HR,FIN:ALL' -
        , min_write_label => 'PUBLIC' -
        , def_label       => 'CONFIDENTIAL:HR,FIN:ALL' -
        , row_label       => 'PUBLIC');
 
EXEC sa_user_admin.set_user_labels -
        ( policy_name     => 'DOC_POLICY' -
        , user_name       => 'HR_EMP' -
        , max_read_label  => 'CONFIDENTIAL:HR:WEST' -
        , max_write_label => 'CONFIDENTIAL:HR:WEST' -
        , min_write_label => 'PUBLIC' -
        , def_label       => 'CONFIDENTIAL:HR:WEST' -
        , row_label       => 'PUBLIC');
 
EXEC sa_user_admin.set_user_labels -
        ( policy_name     => 'DOC_POLICY' -
        , user_name       => 'EMP' -
        , max_read_label  => 'PUBLIC' -
        , max_write_label => 'PUBLIC' -
        , min_write_label => 'PUBLIC' -
        , def_label       => 'PUBLIC' -

        , row_label       => 'PUBLIC');

9. Назначение меток строкам таблицы.

Если контролируемая таблица уже была заполнена данными на момент прохождения шага 7, то приписать метки существующим строкам можно, выполнив оператор UPDATE. При добавлении новой строки лучше задавать метку сразу. Например:

 
INSERTINTO app.documents VALUES (2, 'WEST_PAYROLL', 20200);