Лабораторный практикум по НСД 2013
.pdf271
4.6.4. ЛАБОРАТОРНАЯ РАБОТА № 12: ДЕТАЛЬНЫЙ КОНТРОЛЬ ДОСТУПА ПОЛЬЗОВАТЕЛЕЙ К БАЗАМ ДАННЫХ
Цель: Получение навыков практического использования детального контроля доступа пользователей к информации в базе данных. Ознакомление с детальным контролем доступа (FGA – Fine Grained Access) пользователей к информации в базе данных.
Сценарий проведения работы
1.Установка предметной области, заданной преподавателем для настройки детального контроля доступа.
2.Определение политики (правила) безопасности для установленной предметной области.
3.Создание контекста приложения.
4.Создание модуля, устанавливающего контекст и триггера, заставляющего выполнять эту процедуру при соединении с базой данных любого пользователя.
5.Создание функции, воплощающей политику (правило) безопасности.
6.Создание политики (правила) безопасности – обеспечение связи функции по соответствующему пункту с таблицей, для которой сформулирована политика безопасности.
Реализация сценария лабораторной работы
Создание предметной области для настройки детального контроля доступа
Предметная область приведена на рис.16.54. Скрипты создания предметной области - файлы create.sql, insert.sql приведены в приложении 7. В качестве владельца схемы создадим пользователя t2 и дадим ему необходимые привилегии.
Эти действия выполним пользователем SYS. Вся работа проходит в клиентском приложении SQL*Plus, куда копируются нижеприводимые команды.
connect sys/sys@orcl as sysdba DROP USER t2;
DROP USER Зотов; DROP USER Лаврентьев; DROP USER Беззубцев;
CREATE USER t2 IDENTIFIED BY t2 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 1m ON users;
GRANT CREATE ANY CONTEXT TO t2;
272
GRANT EXECUTE_CATALOG_ROLE TO t2; GRANT EXECUTE ON dbms_rls TO t2; GRANT EXECUTE ON dbms_fga TO t2; GRANT CREATE USER TO t2;
GRANT CREATE SESSION, RESOURCE TO t2 WITH ADMIN OPTION; GRANT SELECT ANY TABLE TO t2 WITH ADMIN OPTION;
GRANT CREATE PUBLIC SYNONYM TO t2;
GRANT DROP PUBLIC SYNONYM TO t2;
Для того чтобы всю работу можно было выполнять повторно, удалим создаваемые ранее (при предыдущем выполнении работы) синонимы.
DROP PUBLIC SYNONYM error; DROP PUBLIC SYNONYM f2_1; DROP PUBLIC SYNONYM professor;
DROP PUBLIC SYNONYM get_prof_id;
Теперь выполним скрипты создания предметной области, предварительно разместив их в папке c:\tmp (скрипты приведены в приложении 7).
Connect t2/t2@orcl
После выполнения этой команды надо скопировать из приложения 7 тексты скриптов create.sql, insert.sql и поместить их в текстовые файлы с этими же именами. Файлы create.sql, insert.sql надо поместитьь в папку c:\tmp и вслед за тем выполнить в окне SQL*Plus команды:
@c:\tmp\create.sql
@c:\tmp\insert.sql
Теперь таблицы предметной области созданы и заполнены данными.
Определение политики (правила) безопасности для приведенной предметной области
Определим политику (правило) безопасности для приведенной предметной области (табл.16.10).
|
|
|
|
|
Таблица 16.10 |
|
|
Имя поль- |
Таблица, |
Функ- |
Контекст с |
|
Процедура, |
|
информаци- |
|
||||
Политика |
зователя, |
для кото- |
ция, реа- |
|
устанавли- |
|
который |
рой созда- |
лизую- |
ей, реали- |
|
вающая кон- |
|
|
зующей по- |
|
||||
|
создает |
ется поли- |
щая по- |
|
текст |
|
|
литику для |
|
||||
|
политику |
тика |
литику |
|
|
|
|
функции |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Преподаватель (табли- |
t2 |
t2.Error |
t2.f2_1 |
t2. |
|
t2. get_prof_id |
ца Professor) может |
|
|
|
prof_sec_ctx |
|
|
просматривать в табли- |
|
|
|
|
|
|
це Error записи, касаю- |
|
|
|
|
|
|
щиеся неисправностей |
|
|
|
|
|
|
компьютеров только в |
|
|
|
|
|
|
тех аудиториях, в ко- |
|
|
|
|
|
|
торых этот преподава- |
|
|
|
|
|
|
тель проводит занятия |
|
|
|
|
|
|
|
|
|
|
|
|
|
273
В таблице professor в столбце prof_f 3 записи: 'Лаврентьев, Зотов, Беззубцев. Этих 3-х пользователей создадим. На основании политики безопасности они будут видеть разные строки в таблице Error при одинаковом запросе выборки к этой таблице.
После установки предметной области выполним запрос к таблице Error, связав вывод из нее со значением столбца Pro_f в таблице Professor, чтобы в начале работы ознакомиться с тем, какой результат мы должны получить при выполнении запроса к таблице Error разными пользователями из таблицы Professor.
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 |
Лаврентьев |
Рис. 16.54. Учебная информационная система «Учёт использования дисплейных классов»
274
Из последнего запроса видно, что в соответствии с введенной политикой (табл.16.10) запрос:
SELECT * FROM Error;
Для пользователя «Зотов» должен вывести одну строку:
ERR_ID ERR_TYPE |
ERR_DESCRIPTION |
REPAIRED |
CLASS_ID COMP_ID |
|||
-------- |
----- |
------------------- |
-------------- |
---------- |
----------- |
|
2 |
|
Неисправен процессор |
- |
1 |
16 |
Для пользователя «Лаврентьев» - две строки:
ERR_ID ERR_TYPE |
ERR_DESCRIPTION |
REPAIRED CLASS_ID COMP_ID |
|||
-------- |
----- |
------------------- |
-------------- |
---------- |
----------- |
3 |
|
Сгорел монитор |
+ |
8 |
30 |
1 |
|
Сломался USB порт |
+ |
5 |
1 |
Для пользователя «Беззубцев» строки не найдены.
Создание контекста приложения
Прежде чем создавать контекст приложения создадим нужных нам для иллюстрации детального контроля доступа пользователей. Эти пользователи:
Лаврентьев, Зотов, Беззубцев с паролями 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;
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
275
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 значение.
Триггер создадим пользователем «sys».
Connect syst/sys@orcl as sysdba
CREATE OR REPLACE TRIGGER db_trigger AFTER LOGON ON DATABASE
BEGIN t2.get_prof_id;
END;
/
Создание функции, воплощающей политику (правило) безопасности
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
276
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 (это извлечение задается частью вы-
ражением «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»).
277
Осталось еще:
GRANT EXECUTE ON f2_1 TO PUBLIC;
CREATE PUBLIC SYNONYM f2_1 FOR t2.f2_1;
чтобы все пользователи могли выполнять эту функцию.
Создание политики (правила) безопасности – обеспечение связи функции с таблицей, для которой сформулирована политика безопасности
Connect t2/t2@orcl BEGIN 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_TYPE |
ERR_DESCRIPTION |
REPAIRED |
CLASS_ID COMP_ID |
|||
-------- |
----- |
------------------- |
-------------- |
---------- |
----------- |
|
2 |
|
Неисправен процессор |
- |
1 |
16 |
connect Лаврентьев/l@orcl SELECT * FROM Error;
ERR_ID ERR_TYPE |
ERR_DESCRIPTION |
REPAIRED CLASS_ID COMP_ID |
|||
-------- |
----- |
------------------- |
-------------- |
---------- |
----------- |
3 |
|
Сгорел монитор |
+ |
8 |
30 |
1 |
|
Сломался USB порт |
+ |
5 |
1 |
connect Беззубцев/b@orcl
SELECT * FROM Error;
строки не выбраны
Результат совпал с ожидаемым. Проверим еще выполнение UPDATE
connect Лаврентьев/l@orcl
278
UPDATE error SET repaired='-';
2 строк обновлено.
SELECT * FROM Error;
ERR_ID |
ERR_TYPE ERR_DESCRIPTION |
REPAIRED |
CLASS_ID COMP_ID |
||
-------- |
----- |
------------------- |
-------------- |
---------- |
----------- |
3 |
|
Сгорел монитор |
- |
8 |
30 |
1 |
|
Сломался USB порт |
- |
5 |
1 |
Запрос показал, что мы меняем строки, «видимые» только пользователю «Лаврентьев»
Вернем таблицу в исходное состояние.
ROLLBACK.
Сдача лабораторной работы
Сдача лабораторной работы заключается в реализации студентом детального контроля доступа на индивидуальной предметной области. Студент сам определяет «родительскую» таблицу, в которой для трех строк символьного столбца с неповторяющимися значениями создает пользователей, а политику разграничения полномочий формирует для какой-либо «дочерней» таблицы, т.е. таблицы, в которой в качестве Foreign Key присутствует Primary Key родительской таблицы.
Тестовые задания к лабораторной работе № 12
Входной контроль
1.Среди нижеприводимых укажите строк(у/и) со средствами СУБД, помогающими реализовать принцип «минимальных привилегий».
a)Роли, упрощающие администрирование за счет определения групп детализированных привилегий, ограничивающих права доступа;
b)Представления (view), позволяющие ограничить доступ к данным;
c)Профили пользователя;
d)Хранимые процедуры, реализующие корректные транзакции без прямого предоставления привилегий конкретному пользователю;
e)Правильных ответов нет.
2.Среди нижеприводимых укажите строк(у/и) с компонент(ом/ами), используемым(и) при реализации детального контроля доступа.
a)Представление таблицы, для которой реализуется детальный контроль доступа;
b)Контекст приложения;
c)Политика безопасности;
d)Функция, реализующая политику безопасности;
e)Правильных ответов нет.
279
3.Среди нижеприводимых укажите строк(у/и) с преимуществами детального контроля доступа по сравнению с использованием ролей, представлений, хранимых процедур.
a)Защиту таблицы придется создавать только однажды на сервере баз данных, а не реализовывать ее многократно в каждом приложении, которое обращается к данным;
b)Детальный контроль доступа реализуется на уровне базы данных и не принимает в расчет логику конкретных приложений;
c)Детальный контроль доступа может быть реализован не привилегированным пользователем;
d)Детальный контроль доступа сокращает время отработки запросов пользователей к базе данных;
e)Правильных ответов нет.
4.Укажите синонимы детального контроля доступа (Fine Grained Access Control - техническое название).
a)Виртуальная частная база данных;
b)Безопасность на уровне строк;
c)Контекстное разделение;
d)Политика разделения групп строк;
e)Правильных ответов нет.
5.Укажите, в чем выражается использование детального контроля доступа при обращении с использованием SQL к таблице базы данных?
a)Каждый пользователь видит в таблице данные только «свои» и других пользователей с такими же привилегиями;
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)Имя схемы (имя учетной записи) пользователя, в которой находится таблица, для которой реализуется детальный контроль доступа;
280
b)Имя таблицы, для которой реализуется детальный контроль доступа;
c)Привилегии пользователя на действия по созданию его объектов;
d)Название функции, реализующей политику безопасности;
e)Правильных ответов нет.
Выходной контроль
1.Укажите, какие из перечисленных ниже действий «участвуют» в создании
Virtual Private Database.
a)изменить метод аутентификации пользователя с password на external;
b)создать модуль, который устанавливает контекст приложения;
c)определить все роли, принадлежащие владельцу таблиц, для которых реализуется vpd;
d)создать контекст приложения;
e)определить цели политики безопасности;
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;