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