Реализация разграничения доступа на уровне строк для некоммерческих СУБД с открытым исходным кодом Научный руководитель: д.ф.-м.н. Новиков Борис Асенович Автор: Щербаков Константин Владимирович, 545 гр. Постановка задачи Требовалось: предложить механизм разграничения доступа пользователей к данным как на уровне полей, так и на уровне отдельных записей (FLS/RLS) обеспечить производительность не менее 64 запросов в секунду (по sysbench на чтение/запись) предложить гибко настраиваемую систему, которая легко адаптируется под различные политики безопасности предотвратить обход установленных для пользователей ограничений (при условии отсутствия физического доступа к данным или серверу с СУБД) Цель разработки Реализовать систему контроля и разграничения доступа для СУБД MySQL 5 Внедрить реализованное средство обеспечения контроля доступа в ПК «Электронный деканат» (разработка последнего ведется на факультете журналистики СПбГУ) в качестве независимого приложения/сервиса и опционально в ИС/АСУ «Университет» Предоставить мировому open-source сообществу инструмент разграничения доступа к данным, легко адаптируемый под любые некоммерческие СУБД с открытым кодом или полностью доступными спецификациями (FireBird, Yaffil, PostgreSQL …) Известные подходы реализация RLS на клиенте + гибкость, контроль действий до выполнения - малая защищенность, низкая производительность при выборке реализация RLS средствами СУБД -> на основе существующих атрибутов + высокая защищенность - ограниченность языка описания хранимых процедур, необходимость их модификации -> на основе дополнительных атрибутов + высокая защищенность - большой объем дополнительных данных, необходимость установки дополнительных атрибутов реализация RLS с использованием сервера приложений + сочетает преимущества предыдущих двух подходов - производительность и надежность всей системы зависит от качества реализации Общая схема сервер с СУБД+RLS/FLS модуль <-> клиенты или сервер с СУБД <-> RLS/FLS (сервер приложений) <–> клиенты отсутствует прямой доступ клиентов к СУБД запросы клиентов перехватываются, анализируются, передаются в СУБД при обнаружении попытки авторизации – загрузка правил политики безопасности для данного клиента (из служебной базы mysql), если они не загружены; 3х этапное разрешение правил (RLS); создание представлений (FLS), построение списка допустимых stored procedures построение дерева запроса, поиск в нем защищаемых объектов, модификация и создание where предложений в рамках RLS, замена защищаемых объектов на их представления (для FLS), анализ вызываемых stored procedures на наличие в списке допустимых выполнение запроса, пересылка ответа пользователю (либо информирование о проваленном запросе) Особенности реализации 1 основной модуль работает в виде сервиса/демона правила RLS – предикаты безопасности – хранятся в отдельных таблицах (для пользователей и ролей) в базе mysql для реализации FLS хранится информация, необходимая для создания представлений на основе защищаемых объектов в отдельных таблицах (для пользователей и ролей) содержится список допустимых для выполнения stored procedures присутствует отдельная таблица для хранения шаблонов Особенности реализации 2 поддерживается хранение полностью разрешенных правил после отключения пользователя (настраиваемо) присутствует набор таблиц для хранения частично разрешенных правил RLS предусматривается прямое взаимодействие административного приложения и RLS/FLS модуля для оперативного обновления правил политики безопасности создание и модификация правил контроля доступа – только через административное приложение назначение отдельным пользователям ролей в т.ч. самими клиентами (настраиваемо) Преимущества поддержка RLS, FLS, контроль вызова хранимых процедур открытый исходный код бесплатность прозрачность для клиентов возможность компиляции и работы под win/*nix (Delphi 7 / BDS 2006 / Kylix / Lazarus) возможность изменения правил политики безопасности «на лету» поддержка правил как для отдельных пользователей, так и для пользовательских ролей поддержка шаблонов и ссылок в правилах нестрогая иерархия ролей многоуровневая схема полного разрешения правил перехват специально составленных SQL запросов для управления ролями со стороны клиентов Недостатки снижение производительности всей системы при работе с СУБД достигает 50% (35%) (или до 100(70) запросов в секунду) недостаточная поддержка контроля исполнения хранимых процедур (отсутствует контроль параметров) ограниченная поддержка функциональности по изменению политики безопасности со стороны пользователей Результаты тестов (сервис RLS отключен) Конфигурация: P4 531 3.0Ghz 1mb, 1536Mb, SATA 160Gb 7200rpm, Ubuntu 7.0.4+mysql 5.0.20+sysbench db1, db2, db3 – базы из состава ПК “Факультет” без хранимых процедур Результаты тестов (сервис RLS включен) Конфигурация: P4 531 3.0Ghz 1mb, 1536Mb, SATA 160Gb 7200rpm, Ubuntu 7.0.4+mysql 5.0.20+sysbench db1, db2, db3 – базы из состава ПК “Факультет” без хранимых процедур Выводы по функциональным возможностям разработанный сервис способен конкурировать с механизмами, используемыми во многих коммерческих СУБД производительность падает, но не настолько, чтобы исключить возможность использования в рамках проектов «Электронный деканат» и «Университет» открытость исходного кода, бесплатность, поддержка основных ОС позволяют надеяться на дальнейшее развитие и широкое применение в различных областях