ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.04.2021

Просмотров: 1857

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

!

!

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

 7

Ра

зг

ра

ни

че

ни

е

до

ст

уп

а

в

С

У

Б

Д

Л

И
Н

Т

ЕР

М

ан

да

тн

ы

й

до

ст

уп

!

41

 
 

E-

mai

l: 

ma

rke

t@

rele

x.r

u

B

TC

обновить

строку

внесенную

пользователем

C. 

Уровни

доступа

не

указывать

Например

update c.tc set t=’B modif’ where t=’1-C’; 

просмотреть

полученные

строки

с

группами

и

уровнями

:  

select c.tc.*, security(*,’G’) GR, security(*,’R’) 

RAL,  security(*,’W’) WAL from c.tc;

видим

что

сменилась

группа

а

также

повысился

 RAL 

строки

(

согласно

 RAL 

пользователя

 B)

TC

понизить

 RAL 

обновленной

строки

и

колонки

 T 

до

 «

ДСП

» 

update c.tc##"

ДСП

"# set T##"

ДСП

"# = T  

where T='B modif'; 

просмотреть

полученные

строки

с

уровнями

RAL 

и

 WAL 

и

уровнями

 RAL 

столбцов

select c.tc.*, security(*,'R') RAL,  

security(*,'W') WAL, 

security(D,'R') DRAL, security(T, 'R') TRAL 

from c.tc;

RAL 

строки

и

колонки

 T 

понизился

, RAL 

колонки

 D 

остался

прежним

C

TC

выборка

данных

 (select *)

видим

только

 2 

строки

C

TC

выборка

столбца

 (select T)

видим

 3 

строки

т

.

к

RAL 

был

понижен

B

TC

повысить

 WAL 

поля

 T 

в

строке

до

«

СЕКРЕТНО

»: 

update c.tc##”

ДСП

”# set 

T##”

ДСП

”#”

СЕКРЕТНО

” = T where T='B 

modif'; 

проверим

select security(T,’W’) from c.tc where T='B 

modif';

WAL 

поля

повысился

C

TC

Попытка

обновить

значение

поля

 T 

в

этой

строке

update tc set T=’C modif’ where T=’B modif’; 

аналогично

для

удаления

delete from tc where T='B modif';

Обновлено

/

удалено

 0 

строк

уровень

ценности

поля

«

СЕКРЕТНО

» 

не

позволяет

пользователю

 C 

с

 RAL 

«

ДСП

» 

перезаписать

/

удалить

данные

B

TC

понизить

 WAL 

поля

 T 

и

 RAL 

поля

 D 

в

строке

до

 «

ДСП

»: 

update c.tc##”

ДСП

”# set T##”

ДСП

”#”

ДСП

” = 

T, D##”

ДСП

”#=D where T='B modif';

строка

успешно

обновлена

C

TC

удалить

запись

delete from tc where T='B modif';

теперь

удаление

успешно


background image

!

42

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

 7

Ра

зг

ра

ни

че

ни

е

до

ст

уп

а

в

С

У

Б

Д

Л

И
Н

Т

ЕР

М

ан

да

тн

ы

й

до

ст

уп

!

!

 
 

E-

mai

l: 

ma

rke

t@

rele

x.r

u

7.10. 

Ограничение

доступа

с

сетевых

станций

Задача

:

Разрешить

сетевой

доступ

для

пользователей

групп

  G1 

и

  G2 

только

с

конкретной

сетевой

станции

кроме

того

уровень

доступа

этих

пользователей

должен

быть

не

ниже

 «

ДСП

».  

Указания

1.

Сначала

отменим

доступ

любых

пользователей

с

любых

сетевых

станций

REVOKE ACCESS ON UNLISTED STATION FROM ALL; 
3.

Для

данной

практики

необходима

работа

с

двумя

компьютерами

клиентом

и

сервером

имеющими

разные

сетевые

адреса

На

клиентском

компьютере

настройте

клиентскую

часть

  (

пропишите

сервер

в

nodetab), 

запустите

драйвер

клиента

На

серверной

части

запустите

драйвер

сервера

Проконтролируйте

настройки

на

клиентской

части

запустите

  INL 

и

попробуйте

присоединится

к

серверу

например

под

пользователем

  SYSTEM. 

Должна

выдаваться

ошибка

  1022  – 

нарушение

привилегий

  (

нет

доступа

с

сетевых

станций

). 

Примечание

Если

будут

выдаваться

другие

ошибки

это

означает

что

неправильно

настроено

сетевое

взаимодействие

Настройте

его

корректно

4.

Присоединитесь

к

БД

с

консоли

сервера

под

АБ

 (SYSTEM), 

и

создайте

станцию

в

соответствии

с

условием

задачи

CREATE STATION G1_G2 PROTOCOL ‘TCPIP’ ADDRESS ‘<

адрес

станции

>’ LEVEL(“

ДСП

”,”

НЕСЕКРЕТНО

”); 

Адрес

станции

можно

узнать

например

при

помощи

команды

  ifconfig 

в

  Unix, 

или

через

панель

управления

в

 Windows, 

или

зная

имя

компьютера

и

подав

 ping 

на

него

.  

5.

Дайте

доступ

пользователям

групп

 G1 

и

 G2 

к

станции

 G1_G2: 

GRANT ACCESS ON STATION G1_G2 TO G1; 

GRANT ACCESS ON STATION G1_G2 TO G1; 

6.

Проверим

возможность

доступа

пользователей

с

сетевой

станции

Пользователи

 A 

и

  C 

должны

получить

доступ

Пользователь

  B 

не

получает

доступ

т

.

к

его

 RAL 

выше

максимального

разрешенного

 RAL 

для

станции

 G1_G2.   

Пользователи

 D 

и

 SYSTEM 

по

-

прежнему

не

имеют

доступа

с

сетевых

станций

7.11. 

Ограничение

доступа

к

внешним

устройствам

Задача

:

Разрешить

использовать

дополнительную

директорию

  ~/addb 

для

хранения

данных

таблиц

если

пользователи

имеют

уровень

доступа

  (RAL)  «

СЕКРЕТНО

» 

и

выше

Пусть

соответствующее

устройство

называется

 ‘SY01’.

Указания

1.

Вначале

попробуем

определить

устройство

через

переменную

окружения

как

в

незащищенном

режиме

Выполним

команды

ОС

mkdir ~/addb 
export  SY01=~/addb 

Попробуем

создать

таблицу

файл

данных

которой

должен

размещаться

на

устройстве

 SY01.  

inl –u SYSTEM/MANAGER 
SQL> create table t(I int) datafiles 1(‘SY01’ 10); 

Получим

ошибку

нарушения

мандатного

доступа

т

.

к

указанное

устройство

не

находится

в

списке

разрешенных

7.

Создадим

устройство


background image

!

!

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

 7

Ра

зг

ра

ни

че

ни

е

до

ст

уп

а

в

С

У

Б

Д

Л

И
Н

Т

ЕР

М

ан

да

тн

ы

й

до

ст

уп

!

43

 
 

E-

mai

l: 

ma

rke

t@

rele

x.r

u

CREATE DEVICE SY01 DIRECTORY ‘~/addb’  
LEVEL(“

СЕКРЕТНО

”,”

НЕСЕКРЕТНО

”); 

8.

Дадим

доступ

к

устройству

всем

пользователям

GRANT ACCESS ON DEVICE SY01 TO ALL; 

9.

Проверим

возможность

работы

с

устройством

Будем

пытаться

от

имени

разных

пользователей

 (

с

категорией

не

ниже

 RESOURCE) 

размещать

данные

таблицы

 T 

на

устройстве

 SY01 

при

помощи

запроса

CREATE

 TABLE T(I INT) DATAFILES 1(‘SY01’ 10); 

Результаты

должны

соответствовать

таблице

7.12. 

Аудит

Задача

:

Необходимо

регистрировать

все

случаи

успешной

модификации

данных

таблицы

  C.TC 

любого

вида

  (

т

.

е

вставка

удаление

обновление

), 

а

также

неуспешных

попыток

обновления

данных

в

этой

таблице

Необходимо

также

протоколировать

все

соединения

и

отсоединения

пользователей

к

БД

.

Указания

Работа

выполняется

под

пользователем

  – 

АБ

Сначала

необходимо

включить

протоколирование

AUDIT START; 

Затем

необходимо

настроить

протоколирование

требуемых

событий

AUDIT ENABLE INSERT ON C.TC BY ACCESS WHEN SUCCESS; 

AUDIT ENABLE DELETE ON C.TC BY ACCESS WHEN SUCCESS; 

AUDIT ENABLE UPDATE ON C.TC BY ACCESS WHEN SUCCESS; 

AUDIT ENABLE UPDATE ON C.TC BY ACCESS WHEN NOT SUCCESS; 

AUDIT ENABLE CONNECT WHEN SUCCESS; 

AUDIT ENABLE DISCONNECT WHEN SUCCESS; 

После

этого

выполните

несколько

успешных

/

неуспешных

попыток

модификации

таблицы

из

-

под

разных

пользователей

 (

см

предыдущие

задания

и

просмотрите

протокол

SELECT * FROM AUDIT_EVENTS;

Задача

для

самостоятельного

выполнения

:   

1.

Необходимо

также

протоколировать

удачные

и

неудачные

попытки

соединения

под

пользователем

  SYSTEM, 

и

   

удачные

и

неудачные

попытки

вставки

строк

в

таблицу

 TB.

Пользователь

Результат

B

успешно

C

неудачно

: RAL 

пользователя

недостаточен

D

успешно


background image

!

!

!

44

E-mail: market@relex.ru

ЗАО

НПП

 «

РЕЛЭКС

»

http://www.relex.ru

Практическое

занятие

 8

Пример

создания

защищенной

базы

данных

Практика

 2 

часа

 (

Лекция

 6)

На

лекции

мы

подробно

рассмотрели

пример

проектирования

защищенной

БД

для

задачи

автоматизации

документооборота

На

практическом

занятии

мы

создадим

эту

БД

зададим

в

ней

все

ПРД

и

проверим

их

функционирование

на

нескольких

примерах

запросов

В

частности

мы

проверим

реакцию

систему

на

выделенные

нами

в

модели

нарушителя

попытки

НСД

Последовательности

запросов

для

создания

объектов

БД

и

назначения

ПРД

содержатся

в

директории

  pract8.   

Каждый

файл

соответствует

некоторому

этапу

проектирования

защищенной

БД

Мы

будем

исполнять

эти

файлы

по

порядку

в

утилите

 INL. 

Перед

исполнением

просмотрите

и

проанализируйте

каждый

файл

Последовательность

действий

состоит

из

следующих

этапов

1.

Подготовка

базы

данных

1.1. 

Создайте

новую

базу

данных

.  

1.2. 

Запустите

на

ней

СУБД

ЛИНТЕР

1.3. 

Проинициализируйте

поддержку

расширенного

КСЗ

и

хранимых

процедур

/

триггеров

  (

для

этого

прогоните

файлы

systab.sql

и

secutiry.sql

  (

для

ЛИНТЕР

  5.9 

еще

необходимо

прогнать

файл

extsec.sql

из

директории

dict

дистрибутива

ЛИНТЕР

). 

Для

ЛИНТЕР

 5.7 

после

этого

необходимо

остановить

и

снова

перезапустить

ядро

чтобы

СУБД

«

увидела

» 

соответствующие

системные

таблицы

Замечание

После

инициализации

расширенной

защиты

в

БД

доступ

к

этой

БД

с

удаленных

сетевых

станций

будет

по

умолчанию

запрещен

Чтобы

разрешить

доступ

надо

либо

явно

прописать

каждую

станцию

либо

явно

подать

запрос

разрешающий

доступ

со

всех

удаленных

станций

GRANT ACCESS ON UNLISTED STATION TO ALL; 

2.

Создание

объектов

базы

данных

и

ПРД

2.1. 

Первый

шаг

в

создании

защищенной

БД

состоит

в

создании

уровней

защиты

Это

задача

администратора

безопасности

 (

АБ

), 

т

.

е

пользователя

 SYSTEM. 

Прогоните

файл

cre_levels.sql

2.2. 

Теперь

АБ

должен

создать

пользователя

  – 

администратора

приложений

(DOCUM) 

и

группу

  «

Документооборот

». 

Соответствующие

запросы

приведены

в

файле

init_doc.sql

Прогоните

этот

файл

2.3. 

Следующим

шагом

разработчик

создает

объекты

БД

Соединитесь

с

БД

под

пользователем

 DOCUM (

можно

сделать

это

не

выходя

из

 INL, 

подав

команду

  

username DOCUM/ ). 

Прогоните

файл

doc_base.sql

Обратите

внимание

что

в

таблице

содержимого

документов

мы

явно

подняли

 WAL 

до

 «

ДСП

», 

чтобы

обеспечить

что

содержимое

документов

будет

всегда

иметь

гриф

не

ниже

«

ДСП

». 

Кроме

того

мы

создали

триггер

  INS_DOC_REG, 

которые

обеспечивает

что

ответственным

за

новый

документ

всегда

оказывается

начальник

соответствующего

отдела

а

в

поле

создателя

записывается

логин

того

пользователя

который

добавил

запись

Также

автоматически

проставляются

дата

создания

и

статус

документа

2.4. 

Разработчик

задает

правила

разграничения

доступа

прогоните

файл

  

doc_base_access.sql

.

3. 

Создание

субъектов

БД

с

соответствующими

правами

  (

в

нашем

примере

выполняет

разработчик

приложения

создавая

новых

пользователей

СУБД

)


background image

!

!

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

 8

П

ри
ме

р

со

зд

ан

ия

за

щ

и

щ

ен

но

й

ба

зы

да

нн

ы

х

!

45

 
 

E-

mai

l: 

ma

rke

t@

rele

x.r

u

3.1. 

Для

удобства

создания

нового

пользователя

документооборота

создайте

хранимую

процедуру

 reg_docum_user: 

прогоните

файл

 reg_docum_user.sql

Эта

процедура

также

использует

процедуру

генерации

первичного

ключа

GeneratePK, 

так

что

прогоните

также

файл

 sp_seq.sql

.

3.2. 

Создайте

несколько

пользователей

системы

документооборота

В

файле

test_cre_users.sql

содержатся

девять

вызовов

хранимой

процедуры

reg_docum_user, 

которые

создают

три

отдела

и

девять

пользователей

Процедура

должна

возвращать

значение

  0  (

нет

ошибок

). 

Можно

проконтролировать

список

добавленных

пользователей

СУБД

подав

 select * from 

NEW_USERS. 

4. 

Назначение

групп

и

уровней

доступа

пользователям

 (

выполняет

АБ

)

В

нашем

примере

пользователи

СУБД

только

что

были

созданы

поэтому

АБ

должен

назначить

им

группы

  (

в

нашем

случае

  «

Документооборот

») 

и

уровни

доступа

Войдите

под

АБ

(

можно

не

выходя

из

 INL: username SYSTEM/MANAGER) 

и

прогоните

файл

 new_users_access.sql

5. 

Инициализация

подсистемы

аудита

 (

выполняет

АБ

)

Необходимо

включить

режим

протоколирования

и

установить

необходимость

протоколирования

изменений

в

таблицах

БД

документооборота

Соответствующие

запросы

приведены

в

файле

 doc_audit.sql

8.1. 

Работа

с

защищенной

базой

данных

Попробуем

сымитировать

работу

с

нашей

защищенной

базой

данных

на

примере

жизненного

цикла

двух

документов

Сначала

мы

разберемся

как

будет

выглядеть

штатная

работа

с

данными

  (

без

нарушений

ПРД

). 

Затем

на

примере

уже

имеющихся

данных

о

документах

проверим

что

реализуются

все

требования

ПРД

по

отношению

к

пресечению

попыток

НСД

перечисленных

в

лекции

типов

Жизненный

цикл

будем

имитировать

через

последовательности

запросов

выдаваемых

разными

пользователями

Эти

запросы

можно

исполнять

через

  INL 

или

утилиту

 lindesk (lindeskx), 

если

она

имеется

в

рассматриваемом

дистрибутиве

ЛИНТЕР

.

Жизненный

цикл

первого

документа

1.

Пользователь

-

секретарь

  SEC1 

создает

новый

документ

с

идентификатором

  1, 

именем

  ‘

Документ

  1’, 

и

относит

его

к

отделу

с

кодом

  3  (

в

нашем

примере

это

отдел

с

именем

  ‘

Отдел

  2’).   

Для

этого

соединяемся

с

сервером

БД

под

именем

SEC1 

и

подаем

запрос

insert into doc_info_ins(doc_id, name, r_division) 
values(1, '

Документ

 1', 3); 

Результаты

завершения

свидетельствуют

о

том

что

строка

добавлена

Мы

можем

проверить

это

подав

 select 

из

 doc_info_read: 

select * from doc_info_read; 

(

в

результате

видим

одну

строку

причем

триггер

на

 INSERT 

автоматически

прописал

поля

 R_REVIEWER (‘BOSS2’), CRE_DATE 

и

 STATUS).  

10.

Начальник

Отдела

  2 

назначает

в

качестве

исполнителя

документа

своего

подчиненного

 U21. 

Входим

под

именем

 BOSS2 

и

подаем

запрос

update doc_info_write##"

НЕСЕКРЕТНО

"#"

НЕСЕКРЕТНО

"# set 

R_OPERATOR##"

НЕСЕКРЕТНО

"#"

НЕСЕКРЕТНО

"#='U21' where 

doc_id=1; 

Здесь

нам

пришлось

явно

указать

несекретные

метки

доступа

т

.

к

если

бы

мы

подали

обычный

  UPDATE, 

запись

о

документе

получила

бы

  RAL  “C

ЕКРЕТНО

” 

по

  RAL-

у

пользователя

  BOSS2. 

Подобные

ситуации

необходимо

учитывать

при

разработке

приложений

чтобы

пользователи

с

высоким

уровнем

доступа

случайно

не

повышали

уровень

чтения

модифицируемых

ими

данных

там

где

этого

не

должно

быть

Результат

обновления

можно

проконтролировать

при

помощи

запроса

select * from doc_info_read; 

Заметим

что

запись

о

документе

доступна

пользователю

  BOSS2, 

т

.

к

он

является

контролером

документа