- •Введение в безопасность баз данных
- •Аутентификация пользователей в системе Oracle
- •Внешняя аутентификация пользователей
- •Аутентификация на основе инфраструктуры сертификатов
- •Методы дискреционного разграничения доступа
- •Предоставление системных привилегий
- •Методы дискреционного разграничения доступа
- •Предоставление системных привилегий
- •Отмена привилегий
- •Обеспечение разграничения доступа к данным с помощью представлений
- •Предоставление привилегий на доступ к объекту
- •Реализация контроля доступа с помощью хранимых процедур
- •Обеспечение защиты данных с помощью триггеров
- •Системные привилегии, определяющие права по работе с пользователями
- •Разграничение доступа на основе ролей
- •Управление допустимостью использования ролей
- •Реализация мандатной модели субд Oracle
Предоставление привилегий на доступ к объекту
Данные привилегии управляют разграничением доступа к таблицам, представлениям, хранимым процедурам, последовательностям и так далее.
Общий синтаксис оператора на выдачу объектных привилегий имеют следующий синтаксис:
>grant {<привилегия на доступ к объекту или все привилегии (ALL PRIVILEGIES)>} [{<имя столбца>,…}] on [<имя схемы> ] <имя объекта> to{ <имя пользователя, или , если всем - PUBLIC>} [with grant option]
Параметр привилегии на доступ к объекту, то есть наименование привилегии, обычно совпадает с наименованием SQL-оператора, который осуществляет с данным объектом действие.
Пример:
>connect u2/u2psw;
>create table tab1 (At1 Number);
>grant select, insert, update on tab1 to u1;
>connect u1/u1psw;
>insert into tab1 values (123);
--ok!
>update tab1 set At1 = 345 where At1 = 123;
--ok!
>delete from tab1 where At1 = 876;
--error!
Синтаксис языка предоставляет возможность избирательного доступа к отдельным столбцам таблицы при ее обновлении.
>create Table tab1 (At1 number, At2 number);
>grant select on tab1 to u1;
>grant insert, update (At1) on tab1 to u1;
>connect u1/u1psw
>insert into u2.tab1 values (123, 123)
>update u2.tab1 set At1 = 345;
>select*from u2.tab1;
At1 At2
345 123
>update u2.tab1 set At2 = 678;
--error!
Привилегия на выборку не может быть избирательной!!!
Отмена привилегий
Чтобы отменить системные или объектные привилегии, предоставленные пользователям или ролям, используется команда revoke.
Revoke<системная привилегия> from { <пользователь>|<роль>|PUBLIC}
Revoke [{<объектная привилегия>, …}| ALL PRIVILEGIES ] on <объект> from {<пользователь>|<роль>|PUBLIC}
Использование ключевого слова PUBLIC приводит к отмене привилегии для всех пользователей, при этом отмена привилегий, предоставленных пользователю явно или через роль не происходит. Отменяются только те привилегии, которые выдавались Public-у.
Команда revoke не может быть использована для отмены привилегий доступа к объекту, явно предоставленных другим пользователям.
Отмена привилегий для пользователя или роли наступает немедленно.
Обеспечение разграничения доступа к данным с помощью представлений
Под представлением понимается динамически поддерживаемая сервером выборка из одной или нескольких таблиц. Оператор select, определяющий выборку, ограничивает видимые пользователю данные. Кроме того он может ограничить данные, которые пользователь может модифицировать. Сервер гарантирует актуальность представления, то есть формирование представления (подстановка соответствующего запроса и выборка данных) производится каждый раз при обращении к нему. Наличие такого объекта, как представление, позволяет администратору делать действие привилегий более избирательным. Для этого создается представление, которое на основе одной или нескольких таблиц базы данных формирует набор строк и столбцов, реально необходимых пользователю для работы.
Create view VOR_ST
as
select ip, name, surname, kurs from students where city = ‘Воронеж’
select * from VOR_ST
и там даны столбцы имя, айпи, фамилия и курс только студентов из воронежа.
Соответственно воронежским преподавателям выданы права только на работу с представлением VOR_ST
Например:
Select surname from VOR_ST where kurs = 4
А внутри это:
Select surname from student where city = ‘Воронеж’ and kurs = 4
Для работы с представлениями предусмотрены системные привилегии create any view, create view, drop any view, а та же объектные привилегии select, insert, update, delete.
Чтобы конструктивно работать с представлением, пользователь должен, как минимум, иметь привилегию select для всех таблиц, которые участвуют в запросе, формирующем данное представление. Поэтому данная привилегия наследуется представлением для пользователя, который его создает. Это же верно и для привилегий, связанных с модификацией данных.
>connect u1/u1psw;
>create table tab1 (at1 char (3), at2 int);
>insert into tab1 values (‘abc’, 1);
>create view v1 as at1 select at1 from tab1;
>connect so/sopsw;
>grant create view to u1;
>connect u1/u1psw;
>create view v1 as at1 select at1 from tab1;
>grant select on v1 to u2;
>connect u2/u2psw;
>select * from u1.v1; -> At1 - abc
>select * from u1.tab1 ->
C позиции разграничения доступа часто целесообразно предоставлять пользователям не первичную, а производную информацию, строящуюся на основе информации из базовых таблиц. Для реализации такого представления так же используются представления.
>create table tab1 (At1 number, At2 varchar2(3));
>insert into tab1 values (1, ‘B’);
>insert into tab1 values (2, ‘A’);
>insert into tab1 values (1, ‘A’);
>insert into tab1 values (3, ‘B’);
>create view v1 (Vat1) as select sum (At1) from tab1 group by At2;
>grant select on v1 to u2;
>connect u2/u2psw;
>select* from v1;
Vat1
4
3
