Разграничение доступа в ORACLE 10 Дмитрий Петренко
Идея разделения доступа Система одна – пользователей много Пользователи различаются по уровню привилегий Каждый пользователь имеет свои привилегии доступа к объектам системы Пользователь имеет право передавать свои права другим
Реализация идеи разделения доступа В СУБД создан специальный объект – пользователь Создан механизм предоставления и лишения прав доступа grant/revoke Grant/revoke – SQL операторы grant on to
Проблема Стандартная функциональность grant/revoke недостаточна Прямое соединение с СУБД - опасно
Задача Расширить функциональность grant/revoke Ограничить количество непосредственных соединений с БД Создать единообразный способ задания правил доступа
Решение Создать приложение со следующими возможностями Работа между пользователем и СУБД Задание правил доступа к объектам БД в стандартном виде grant/revoke Аутентификация пользователей Обработка правил доступа и модификация запросов пользователя Выдача пользователю результата запроса
Как это работает Администратор создает пользователей и задает им привилегии с помощью синтаксиса расширенного grant/revoke Правила распознаются системой, и метаинформация о доступе заносится в security DB. Пользователь, обращается к СУБД, но его запрос перехватывается модулем управления доступом и модифицируется в соответствии с правилами хранящимися в security DB. Модифицированный запрос отдается СУБД, а его результат - пользователю
Структура приложения Модуль управления доступом Модуль администрирования Клиентское приложение СУБД Метаданные Расширенный grant/revoke Правила Запросы SQL/данные Логический уровень Модифицированный SQL/данные
Модуль администрирования Авторизация пользователя Задание и синтаксический разбор правил Занесение полученной на основе разбора метаинформации в БД
Формат инструкции grant Grant on to [when P1] [where P2] [with grant option] [with check option] [rule list position]
Клиентский модуль Авторизация пользователя Формирование запросов к СУБД Пересылка запросов модулю управления Отображение результатов выполнения запроса
Модуль управления доступом Поступил SQL запрос пользователя Есть правила Определение текущего контекста (Имя пользователя, время) Выборка правил из базы метаданных в соответствии с контекстом Определение приоритета правил, выбор наиболее актуального Модификация пользовательского запроса и передача его СУБД завершение
Пример работы Grant select(name, salary сonvet_euro(salary), date_birth null) on employees to user where salary>100 when time()>10:20; NamePositionSalaryDate_birth SmitManager GatesTop Manager ShekspeareWriter NamePositionSalaryDate_birth SmitManager1660 GatesTop Manager Select * from employees
Вопросы?
Спасибо за внимание