Санкт-Петербургский государственный университет информационных технологий, механики и оптики
Администрирование баз данных и приложений
Задание «Разграничению доступа к данным».
Выполнил: гр. 5101
Задание:
Создать приложение, иллюстрирующее возможности СУБД Oracle по разграничению доступа к данным. В приложении должны быть задействованы:
1). несколько пользователей базы данных (по количеству работающих над проектом)
2). синонимы,
3). привилегии,
4). роли,
5). возможности создания ролей, защищенных паролем,
6). возможности по включению/выключению ролей из приложения.
В работе рекомендуется использовать проект базы данных и приложения, созданные на предыдущих курсах по дисциплинам, посвященным базам данных.
Инфологическая модель базы данных:
Пользователи базы данных:
- s133873 (владелец объектов);
- s134268.
Создание публичных синонимов:
CREATE PUBLIC SYNONYM name_zimmer FOR s133873.name_zimmer;
CREATE PUBLIC SYNONYM pipl FOR s133873.pipl;
CREATE PUBLIC SYNONYM family FOR s133873.family;
CREATE PUBLIC SYNONYM name_mes FOR s133873.name_mes;
CREATE PUBLIC SYNONYM zanatia FOR s133873.zanatia;
CREATE PUBLIC SYNONYM mebel FOR s133873.mebel;
CREATE PUBLIC SYNONYM name_mebel FOR s133873.name_mebel;
CREATE PUBLIC SYNONYM zimmer FOR s133873.zimmer;
CREATE PUBLIC SYNONYM zimmer_view FOR s133873.zimmer_view;
CREATE PUBLIC SYNONYM pipl_view FOR s133873.pipl_view;
CREATE PUBLIC SYNONYM zimmer_for_add_pipl_view FOR s133873.zimmer_for_add_pipl_view;
CREATE PUBLIC SYNONYM family_for_add_pipl_view FOR s133873.family_for_add_pipl_view;
CREATE PUBLIC SYNONYM zanatia_for_add_pipl_view FOR s133873.zanatia_for_add_pipl_view;
Создание роли, позволяющей выполнять предложения SELECT:
drop role bara_select;
create role bara_select IDENTIFIED BY select12345;
grant select on name_zimmer to bara_select;
grant select on pipl to bara_select;
grant select on family to bara_select;
grant select on name_mes to bara_select;
grant select on zanatia to bara_select;
grant select on mebel to bara_select;
grant select on name_mebel to bara_select;
grant select on zimmer to bara_select;
grant select on zimmer_view to bara_select;
grant select on pipl_view to bara_select;
grant select on zimmer_for_add_pipl_view to bara_select;
grant select on family_for_add_pipl_view to bara_select;
grant select on zanatia_for_add_pipl_view to bara_select;
grant bara_select to s134268;
Создание роли «Администратор»:
drop role bara_dba;
create role bara_dba IDENTIFIED BY dba12345;
grant update, insert, delete on name_zimmer to bara_dba;
grant update, insert, delete on pipl to bara_dba;
grant update, insert, delete on family to bara_dba;
grant update, insert, delete on name_mes to bara_dba;
grant update, insert, delete on zanatia to bara_dba;
grant update, insert, delete on mebel to bara_dba;
grant update, insert, delete on name_mebel to bara_dba;
grant update, insert, delete on zimmer to bara_dba;
grant update, insert, delete on zimmer_view to bara_dba;
grant update, insert, delete on pipl_view to bara_dba;
grant update, insert, delete on zimmer_for_add_pipl_view to bara_dba;
grant update, insert, delete on family_for_add_pipl_view to bara_dba;
grant update, insert, delete on zanatia_for_add_pipl_view to bara_dba;
grant bara_select to bara_dba;
grant bara_dba to s134268;
Триггера уровня форм приложения для базы данных.
Триггер приложения базы данных, срабатывающий в процессе авторизации пользователя (с привилегиями «User»):
declare
xxx number;
begin
:Global.kolerr := (:Global.kolerr + 1);
if :Global.kolerr >= 3 then
Set_Alert_Property('warn',ALERT_MESSAGE_TEXT,'Basta!');
xxx := Show_Alert('warn');
exit_form;
end if;
dbms_session.set_role('bara_select IDENTIFIED BY '||:b_passwd.passwd);
:global.cur_role:= 'select';
:global.login := 'yes';
hide_view('k_passwd');
show_view('welcome');
go_block('welcome');
Read_Image_File('/home/s133873/kursovik/1.bmp','bmp','welcome.image1');
end;
Триггер приложения базы данных, срабатывающий при попытке произвести действие, доступное только с правами роли «Администратор»:
DECLARE
AL_Button NUMBER;
bl_id block;
test number;
test1 number;
BEGIN
IF :pipl_view.rem = 'Remove' then
IF :global.cur_role = 'dba' then
Set_Alert_Property('tochno',ALERT_MESSAGE_TEXT,'Tochno udalyaem?');
AL_Button := Show_Alert('tochno');
IF AL_Button = ALERT_BUTTON1 THEN
select f_id into test1 from pipl where pipl.p_id = :pipl_view.p_id;
select count(p_id) into test from pipl, family where family.f_id = pipl.f_id and pipl.f_id = test1;
if test < 2 then
delete from family where f_id in (select family.f_id from family, pipl where family.f_id = pipl.f_id and pipl.p_id = :pipl_view.p_id);
end if;
DELETE FROM pipl WHERE p_id = :pipl_view.p_id;
bl_id := find_block('pipl_view');
set_block_property(bl_id,default_where,'');
execute_query;
Commit_Form;
end if;
end if;
IF :global.cur_role = 'select' then
show_view('k_passwd');
go_block('b_passwd');
END IF;
END IF;
END;
Вывод: в процессе выполнения задания удалось создать приложение, иллюстрирующее возможности СУБД Oracle по разграничению доступа к данным. В приложении задействованы несколько пользователей базы данных
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.