Разграничение доступа в ORACLE 10 Дмитрий Петренко Идея разделения доступа Система одна – пользователей много Пользователи различаются по уровню привилегий Каждый пользователь имеет свои привилегии доступа к объектам системы Пользователь имеет право передавать свои права другим Реализация идеи разделения доступа В СУБД создан специальный объект – пользователь Создан механизм предоставления и лишения прав доступа grant/revoke Grant/revoke – SQL операторы grant <priv> on <object> to <user> Проблема Стандартная функциональность grant/revoke недостаточна Прямое соединение с СУБД - опасно Задача Расширить функциональность grant/revoke Ограничить количество непосредственных соединений с БД Создать единообразный способ задания правил доступа Решение Создать приложение со следующими возможностями Работа между пользователем и СУБД Задание правил доступа к объектам БД в стандартном виде grant/revoke Аутентификация пользователей Обработка правил доступа и модификация запросов пользователя Выдача пользователю результата запроса Как это работает Администратор создает пользователей и задает им привилегии с помощью синтаксиса расширенного grant/revoke Правила распознаются системой, и метаинформация о доступе заносится в security DB. Пользователь, обращается к СУБД, но его запрос перехватывается модулем управления доступом и модифицируется в соответствии с правилами хранящимися в security DB. Модифицированный запрос отдается СУБД, а его результат - пользователю Структура приложения Модуль администрирования Метаданные Правила Расширенный grant/revoke Модуль управления доступом Модифицированный SQL/данные Запросы SQL/данные СУБД Клиентское приложение Логический уровень Модуль администрирования Авторизация пользователя Задание и синтаксический разбор правил Занесение полученной на основе разбора метаинформации в БД Формат инструкции grant Grant <operation> on <object> to <user> [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; Name Position Salary Date_birth Smit Manager 10000 14.10.1953 Gates Top Manager 100 000 23.06.1962 Shekspeare Writer 10 12.03.1786 Date_birth Select * from employees Name Position Salary Smit Manager 1660 Gates Top Manager 16 660 Вопросы? Спасибо за внимание