Горбатов Аттестационные испытания автоматизированных систем от 2014
.pdfлице Professor, чтобы в начале работы ознакомиться с тем, какой результат мы должны получить при выполнении запроса к таблице Error разными пользователями из таблицы Professor.
Таблица 12.1
Политика |
пользователяИмя , |
которыйсоздает политику |
Таблица, для создаетсякоторой политика |
Функция, реалиполитикузующая |
Контекстс инфорреализую,мацией - политикущей для функции |
Процедура, устанавливающаяконтекст |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Преподаватель |
|
t2 |
t2.Error |
t2.f2_1 |
t2. |
t2. |
(таблица Professor) |
|
|
|
|
prof_sec_ctx |
get_prof_id |
может просматри- |
|
|
|
|
|
|
вать в таблице Error |
|
|
|
|
|
|
записи, касающиеся |
|
|
|
|
|
|
неисправностей |
|
|
|
|
|
|
компьютеров только |
|
|
|
|
|
|
в тех аудиториях, в |
|
|
|
|
|
|
которых этот пре- |
|
|
|
|
|
|
подаватель прово- |
|
|
|
|
|
|
дит занятия |
|
|
|
|
|
|
SELECT DISTINCT error.*,professor.prof_f FROM error,computer,auditory,schedule,professor WHERE
error.comp_id=computer.comp_id and computer.aud_id=auditory. aud_id and
auditory.aud_id=schedule.aud_id and schedule.prof_id=professor. prof_id
ORDER BY professor.prof_f;
ERR_ID |
ERR_DESCRIPTION |
CLASS_ID |
|
PROF_F |
||
ERR_TYPE |
REPAIRED |
COMP_ID |
||||
----- ----- |
----------------------- |
-------------- |
---------- |
-------- ---------- |
||
2 |
Неисправен процессор |
- |
1 |
16 |
Зотов |
|
3 |
Сгорел монитор |
|
+ |
8 |
30 |
Лаврентьев |
1 |
Сломался USB порт |
+ |
5 |
1 |
Лаврентьев |
|
|
|
311 |
|
|
|
|
Из последнего запроса видно, что в соответствии с введенной политикой (см. табл. 12.1) запрос:
SELECT * FROM Error;
Для пользователя «Зотов» должен вывести одну строку:
ERR_ID |
ERR_DESCRIPTION |
CLASS_ID |
|
|
ERR_TYPE |
REPAIRED |
COMP_ID |
||
----- ----- |
----------------------- -------------- |
-------------- |
---------------- |
|
2 |
Неисправен процессор |
- |
1 |
16 |
Для пользователя «Лаврентьев» - две строки:
ERR_ID |
ERR_DESCRIPTION |
CLASS_ID |
|
|
ERR_TYPE |
REPAIRED |
COMP_ID |
||
----- ----- |
----------------------- |
-------------- |
-------------- |
---------------- |
3 |
Сгорел монитор |
+ |
8 |
30 |
1 |
Сломался USB порт |
+ |
5 |
1 |
Для пользователя «Беззубцев» строки не найдены.
3. Создание контекста приложения
Прежде чем создавать контекст приложения, создадим нужных нам для иллюстрации детального контроля доступа пользователей. Эти пользователи:
Лаврентьев, Зотов, Беззубцев с паролями l, z, b соответственно
сролью Resource, привилегией create session и с квотой 1m на tablespace users.
Connect t2/t2@orcl
CREATE USER Зотов IDENTIFIED BY z DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 1m ON users;
GRANT RESOURCE, CREATE SESSION TO Зотов;
Аналогично для пользователей «Лаврентьев», «Беззубцев». После создания пользователей дадим им возможность работать
сотдельными таблицами пользователя «t2».
GRANT SELECT, INSERT, UPDATE, DELETE ON error TO PUBLIC;
CREATE PUBLIC SYNONYM error FOR t2.error;
312
GRANT SELECT ON professor TO PUBLIC;
CREATE PUBLIC SYNONYM professor FOR t2.professor;
Контекст приложения должен создавать пользователь «t2».
Connect t2/t2@orcl
CREATE OR REPLACE CONTEXT prof_sec_ctx USING GET_PROF_ID;
После этого создадим процедуру, устанавливающую контекст и триггер, заставляющий выполниться эту процедуру при соединении с базой данных любого пользователя
Connect t2/t2@orcl
CREATE OR REPLACE PROCEDURE get_prof_id AS v_prof_id NUMBER;
BEGIN SELECT prof_id INTO
v_prof_id FROM professor
WHERE UPPER(prof_f)=SYS_CONTEXT('USERENV', 'SESSION_USER');
DBMS_SESSION.SET_CONTEXT('prof_sec_ctx','prof_id1',v_prof_id); EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
END get_prof_id;
/
Дадим возможность всем пользователям выполнять эту процедуру.
GRANT EXECUTE ON GET_PROF_ID to public;
CREATE PUBLIC SYNONYM get_prof_id FOR t2.get_prof_id;
Если процедура «GET_PROF_ID» выполняется, то в контексте «prof_sec_ctx» (являющемся частью системного контекста пользователя) в ячейке с именем «prof_id1» содержится идентификатор того преподавателя из таблицы «Professor», который выполнил процедуру «GET_PROF_ID». Если же процедуру выполняет пользователь, не представленный в таблице «Professor», то в ячейке с именем «prof_id1» будет находиться NULL значение.
313
Триггер создадим пользователем «sys»:
Connect syst/sys@orcl as sysdba
CREATE OR REPLACE TRIGGER db_trigger AFTER LOGON ON DATABASE
BEGIN t2.get_prof_id; END;
/
4. Создание функции, воплощающей политику (правило) безопасности
Connect t2/t2@orcl
CREATE OR REPLACE FUNCTION f2_1
(obj_schema IN VARCHAR2, obj_name IN VARCHAR2) RETURN VARCHAR2
IS
v_return VARCHAR2(500); BEGIN v_return:='comp_id in ( SELECT comp_id FROM
computer,auditory,schedule,professor WHERE computer.aud_id=auditory.aud_id and auditory.aud_id=schedule.aud_id and schedule.prof_id=professor.prof_id and
professor.prof_id=SYS_CONTEXT(''prof_sec_ctx'', ''prof_id1''))'; RETURN v_return;
END;
/
Функция вернет идентификаторы (comp_id) тех компьютеров из таблицы computer, которые установлены в дисплейных классах (таблица auditory), занятия в которых по расписанию (таблица shedule) проводил преподаватель с идентификатором prof_id из таблицы professor (professor.prof_id). Этот идентифика-
тор извлекается из ячейки prof_id1 контекста prof_sec_ctx, созданного как часть системного контекста sys_context (это извлечение
314
задается частью выражением «sys_context(''prof_sec_ctx'', ''prof_id1'')». Полезно проверить возвращаемое функцией значение.
SET SERVEROUTPUT ON
EXEC DBMS_OUTPUT.PUT_LINE(f2_1('T2', 'ERROR'));
Для пользователя «t2» функция вернет: comp_id in (
SELECT comp_id FROM computer,auditory,schedule,professor WHERE computer.aud_id=auditory.aud_id and auditory.aud_id=schedule.aud_id and schedule.prof_id=professor.prof_id and
professor.prof_id=SYS_CONTEXT('prof_sec_ctx', 'prof_id1'))
Теперь полезно выполнить SELECT, содержащийся в возвращаемом значении, чтобы убедиться в правильности его выполнения:
SELECT comp_id FROM computer,auditory,schedule,professor WHERE computer.aud_id=auditory.aud_id and auditory.aud_id=schedule.aud_id and schedule.prof_id=professor.prof_id and
professor.prof_id=SYS_CONTEXT('prof_sec_ctx', 'prof_id1');
Ответ «строки не выбраны» свидетельствует о правильности работы функции (пользователя «t2» действительно нет в таблице
«Professor»).
Осталось еще:
GRANT EXECUTE ON f2_1 TO PUBLIC; CREATE PUBLIC SYNONYM f2_1 FOR t2.f2_1;
чтобы все пользователи могли выполнять эту функцию.
5. Создание политики (правила) безопасности – обеспечение связи функции с таблицей, для которой сформулирована политика безопасности
Connect t2/t2@orcl
BEGIN
315
DBMS_RLS.drop_POLICY( OBJECT_SCHEMA => 't2', OBJECT_NAME => 'error', POLICY_NAME => 'prof_id_policy'); end;
/
BEGIN DBMS_RLS.ADD_POLICY( OBJECT_SCHEMA => 't2', OBJECT_NAME => 'error',
POLICY_NAME => 'prof_id_policy', FUNCTION_SCHEMA => 't2', POLICY_FUNCTION => 'f2_1', STATEMENT_TYPES => 'SELECT, UPDATE'); END;
/
Проверим настроенный нами детальный контроль доступа. connect зотов/z@orcl
SELECT * FROM Error;
ERR_ID |
ERR_DESCRIPTION |
CLASS_ID |
|
|
ERR_TYPE |
REPAIRED |
COMP_ID |
||
----- ----- |
----------------------- -------------- |
-------------- |
---------------- |
|
2 |
Неисправен процессор |
- |
1 |
16 |
connect Лаврентьев/l@orcl SELECT * FROM Error;
ERR_ID |
ERR_DESCRIPTION |
CLASS_ID |
|
|
ERR_TYPE |
REPAIRED |
COMP_ID |
||
----- ----- |
----------------------- |
-------------- |
-------------- |
---------------- |
3 |
Сгорел монитор |
+ |
8 |
30 |
1 |
Сломался USB порт |
+ |
5 |
1 |
connect Беззубцев/b@orcl SELECT * FROM Error;
строки не выбраны
Результат совпал с ожидаемым. Проверим еще выполнение UPDATE: connect Лаврентьев/l@orcl
316
UPDATE error SET repaired='-';
2 строк обновлено.
SELECT * FROM Error;
ERR_ID |
ERR_DESCRIPTION |
CLASS_ID |
|
|
ERR_TYPE |
REPAIRED |
COMP_ID |
||
----- ----- |
----------------------- |
-------------- |
-------------- |
---------------- |
3 |
Сгорел монитор |
+ |
8 |
30 |
1 |
Сломался USB порт |
+ |
5 |
1 |
Запрос показал, что мы меняем строки, «видимые» только пользователю «Лаврентьев»
Вернем таблицу в исходное состояние. ROLLBACK.
Сдача лабораторной работы
Сдача лабораторной работы заключается в реализации студентом детального контроля доступа на индивидуальной предметной области. Студент сам определяет «родительскую» таблицу, в которой для трех строк символьного столбца с неповторяющимися значениями создает пользователей, а политику разграничения полномочий формирует для какой-либо «дочерней» таблицы, т.е. таблицы, в которой в качестве Foreign Key присутствует Primary Key родительской таблицы.
Тестовые задания к работе 12
Входной контроль
1. Среди нижеприводимых укажите строк(у/и) со средствами СУБД, помогающими реализовать принцип «минимальных привилегий»:
a)роли, упрощающие администрирование за счет определения групп детализированных привилегий, ограничивающих права доступа;
b)представления (view), позволяющие ограничить доступ к данным;
c)профили пользователя;
317
d)хранимые процедуры, реализующие корректные транзакции без прямого предоставления привилегий конкретному пользователю;
e)правильных ответов нет.
2.Среди нижеприводимых укажите строк(у/и) с компонент(ом/ами), используемым(и) при реализации детального контроля доступа:
a) представление таблицы, для которой реализуется детальный контроль доступа;
b) контекст приложения; c) политика безопасности;
d) функция, реализующая политику безопасности; e) правильных ответов нет.
3.Среди нижеприводимых укажите строк(у/и) с преимуществами детального контроля доступа по сравнению с использованием ролей, представлений, хранимых процедур:
a) защиту таблицы придется создавать только однажды на сервере баз данных, а не реализовывать ее многократно в каждом приложении, которое обращается к данным;
b) детальный контроль доступа реализуется на уровне базы данных и не принимает в расчет логику конкретных приложений; c) детальный контроль доступа может быть реализован непри-
вилегированным пользователем;
d) детальный контроль доступа сокращает время отработки запросов пользователей к базе данных;
e) правильных ответов нет.
4.Укажите синонимы детального контроля доступа (Fine Grained Access Control – техническое название):
a) Виртуальная частная база данных; b) Безопасность на уровне строк; c) Контекстное разделение;
d) Политика разделения групп строк; e) Правильных ответов нет.
5.Укажите, в чем выражается использование детального контроля доступа при обращении с использованием SQL к таблице базы данных:
a) каждый пользователь видит в таблице данные только «свои»
иданные других пользователей с такими же привилегиями;
318
b)каждый пользователь видит в таблице данные только «свои»
ине видит данные других пользователей;
c)к запросу любого пользователя во время его выполнения динамически присоединяется предложение where….;
d)к запросу любого пользователя во время его выполнения динамически присоединяется предложение group by….;
e)правильных ответов нет.
6.Какие привилегии/роли должен иметь разработчик для реализации детального контроля доступа?
a) CONNECT; b) RESOURCE;
c) EXECUTE_CATALOG_ROLE; d) CREATE ANY CONTEXT;
e) правильных ответов нет.
7.Укажите отдельные компоненты, которые включает политика безопасности, создаваемая пакетом dbms_rls при реализации детального контроля доступа:
a) имя схемы (имя учетной записи) пользователя, в которой находится таблица, для которой реализуется детальный контроль доступа;
b) имя таблицы, для которой реализуется детальный контроль доступа;
c) привилегии пользователя на действия по созданию его объектов;
d) название функции, реализующей политику безопасности; e) правильных ответов нет.
Выходной контроль
1. Укажите, какие из перечисленных ниже действий «участ-
вуют» в создании Virtual Private Database:
a)изменить метод аутентификации пользователя с password на external;
b)создать модуль, который устанавливает контекст приложения;
c)определить все роли, принадлежащие владельцу таблиц, для которых реализуется vpd;
d)создать контекст приложения;
e)определить цели политики безопасности;
319
f)создать функцию воплощения политики безопасности;
g)добавить политику безопасности – связать функцию воплощения политики безопасности с таблицей;
h)правильных ответов нет.
2.Укажите верное определение контекста приложения:
a)контекст – это неизменный блок данных, которым постоянно обмениваются сервер и клиент Oracle при каждой передаче запрошенных данных;
b)контекст – это заголовок списка занятых блоков в буферном кэше SGA;
c)контекст – это часть заголовка каждого блока с хранимой информацией схемы пользователя;
d)контекст – это именованный набор атрибутов и значений, который можно установить и затем связать с сессией текущего пользователя;
e)контекст – результат парсинга запроса пользователя к БД в текущей сессии;
f)правильных ответов нет.
3.Какие значения позволяет получить встроенный кон-
текст USERENV?
a)номер активного log файла;
b)имя пользователя текущей сессии;
c)имя компьютера, с которого пользователь установил сессию
ссервером Oracle;
d)тип аутентификации пользователя;
e)имя базы данных;
f)имя домена базы данных Oracle;
g)правильных ответов нет.
4.Каким компонентом объявления политики DBMS_ RLS.ADD_POLICY обеспечивается возможность выполнения всех действий (select,insert,update,delete) с таблицей, для кото-
рой создается новая политика?
a)policy_function;
b)update_check;
c)static_poicy;
d)enable;
e)statement_types;
f)правильных ответов нет.
320