Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторный практикум по НСД 2013

.pdf
Скачиваний:
66
Добавлен:
12.11.2022
Размер:
9.94 Mб
Скачать

271

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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]