
- •Введение в безопасность баз данных
- •Аутентификация пользователей в системе Oracle
- •Внешняя аутентификация пользователей
- •Аутентификация на основе инфраструктуры сертификатов
- •Методы дискреционного разграничения доступа
- •Предоставление системных привилегий
- •Методы дискреционного разграничения доступа
- •Предоставление системных привилегий
- •Предоставление привилегий на доступ к объекту
- •Отмена привилегий
- •Обеспечение разграничения доступа к данным с помощью представлений
- •Реализация контроля доступа с помощью хранимых процедур
- •Обеспечение защиты данных с помощью триггеров
- •Системные привилегии, определяющие права по работе с пользователями
- •Разграничение доступа на основе ролей
- •Управление допустимостью использования ролей
- •Реализация мандатной модели субд Oracle
Методы дискреционного разграничения доступа
При дискреционном разграничении доступа, доступ к объектам осуществляется на основе множества разрешенных отношений доступа в виде троек: субъект доступа – тип доступа – объект доступа. Принято выделять 2 подхода управления доступом:
Добровольное – базируется на понятии владения объектами. Как правило, владельцами объектов являются те субъекты базы данных, которые их создали. В большинстве систем права владения объектами могут передаваться. В результате реализуется полностью децентрализованный принцип организации управления разграничением доступа. Такой подход обеспечивает гибкость, но делает сложным общий контроль и аудит.
Принудительное – введение единого, централизованного администрирования доступа. Для этого выделяется специальный доверенный субъект, называемый администратором, который определяет привилегии на доступ всем остальным субъектам.
При принудительном контроле доступа больше контроля, но меньше гибкости.
Поэтому на практике в большинстве случаев применяется комбинированный способ управления доступом.
Базовым понятием системы дискреционного разграничения доступа является привилегия.
Привилегия – разрешение на выполнение в системе определенного действия. Сервер базы данных поддерживает для каждого пользователя набор привилегий, который может изменяться.
Все привилегии делятся на 2 класса:
Системные привилегии – дают пользователю право на выполнение какой-либо операции в масштабе базы данных.
Привилегии доступа к объектам – разрешение на выполнение определенной операции над определенным объектом.
Каждый объект базы данных находится в определенной схеме. Под схемой понимается некое пространство имен, в рамках которого находятся объекты, которыми владеет некий пользователь. Имя схемы совпадает с именем пользователя. Следует отметить, что владелец объекта (то есть пользователь, в схеме которого объект находится) обладает полным набором привилегий на доступ к этому объекту.
Предоставление системных привилегий
Системные привилегии могут предоставляться пользователям и ролям. Системные привилегии дают возможность их носителям расширять множество объектов системы. Для предоставления системных привилегий используется команда:
Grant <системная привилегия> to <пользователь/роль>
Все системные привилегии сгруппированы по объектам Oracle.
Краткий список системных привилегий для работы с таблицами:
Create any table – создать таблицу в любой схеме
Create table – создать таблицу в своей схеме
Drop any table
Alter any table – изменить структуру таблицы в любой схеме
Select any table
Update any table – изменить данные в таблице в любой схеме
Insert any table – добавить строчку в таблицу в любой схеме
Delete any table – удалить строчку в таблицу в любой схеме
Lock any table
Backup any table
Когда в название привилегии присутствует any, это значит, что действие не ограничено своей схемой.
Пример:
>connect so/sopsw;
>create user u1 identified by u1psw default tablespace users;
>grant create session to u1;
>grant create table to u1;
>create user u2 identified by u2ps;
>grant create session to u2;
>connect u1/u1psw:
>create table tab1 (At1 int, At2 int);
--ok!
>create table u2.tab1 (At1 int, At2 int);
--error!
>connect so/sopsw;
>grant create any table to u1;
>connect u1/u1psw;
> create table u2.tab1 (At1 int, At2 int);
--ok!
>connect u2/u2psw;
>select * from u1.tab1;
--таблица u1.tab1 не существует
>connect so/sopsw;
>grant select any table to u2;
>connect u2/u2psw;
>select * from u1.tab1;
--ok!
Этот пример не верный, так как так никто никогда не делает.
В настоящее время Oracle позволяет использовать способы аутентификации, основанные на протоколе Radius (Remote Authentication Dial-In User Service). Данный протокол является стандартным, поэтому Oracle работает с любыми Radius совместимыми серверами. Когда клиент выполняет предусмотренную процедуру регистрации на сервере базы данных, сервер Oracle обращается на сервер Radius для аутентификации этого запроса. Сервер Radius либо принимает, либо отклоняет данный запрос. Полученный ответ передается на сервер Oracle, который предпринимает соответствующие действия. Таким образом выполняется полностью прозрачная, защищенная процедура аутентификации. В качестве контролирующего сервера может применяться любой сервер, совместимый с Radius протоколом, например Active-Card, SecureID, Kerberos, Biometrics, etc.
Дополнительные функции по использованию протокола Radius включают применение схемы аутентификации и учета, наподобие пароль-отзыв, выполняемые как последовательность следующих действий:
Сервер Radius передает пароль серверу приложения
Сервер передает пароль машине клиента
Пароль выводится для конечного пользователя
Пользователь вводит отзыв на полученный пароль
Значение отзыва возвращается на сервер Radius
Сервер Radius контролирует полученное значение и передает на сервер приложения ответ, принять или отклонить запрос на соединение с данным пользователем.