Подход Разделения Схемы (Пользователя) При Проектировании Баз Данных Oltp



Проблемы и цель: Разделение схем реализовано в основном для масштабируемости и безопасности:

  • Масштабируемость с точки зрения базы данных должна быть такой, чтобы схему можно было переместить в другую базу данных без ущерба для функциональности.

  • Безопасность с точки зрения базы данных должна быть такой, чтобы внешние пользователи работали только с бизнес-логикой, на которую распределяются гранты, и не имели доступа к первичным данным.

Проблема в том, что если мы даем гранты на модификацию данных кому-то другому, кроме владельца таблиц (первичных данных), мы получаем пласт проблем:
  • Проблема масштабируемости заключается в том, что невозможно распределить схемы по разным базам данных.

  • Проблема безопасности заключается в том, что когда мы получаем доступ к одной схеме, мы получаем доступ к первичным данным другой схемы.

  • Проблема с прозрачностью поведения системы.

    Невозможно понять, где изменяются данные схемы, что приводит к непредсказуемому поведению системы.



Метод решения проблемы:

Решить проблемы с масштабируемостью/безопасностью/прозрачностью поведения системы нам поможет:
  • Инкапсуляция DML внутри схемы — все управление транзакциями, а также операции DML выполняются в рамках схемы-владельца таблицы.



Описание архитектуры предлагаемого метода:



Подход разделения схемы (пользователя) при проектировании баз данных OLTP

Рисунок 1 – Взаимодействие цепей друг с другом Из рисунка видно, что схемы взаимодействуют друг с другом через GATE_PACKAGE или пакеты шлюза.

Существует 2 типа пакетов ворот:

  • Gate_package_in — для входящих запросов к схеме.

  • Gate_package_out — для исходящих запросов из схемы в другую схему.

Все изменения данных выполняются внутри схемы; прямого DML-доступа (вставка, обновление, удаление) из чужой схемы (не владельца таблицы) к таблице не происходит. Доступ из чужой схемы к любым методам/константам/типам и другим объектам также осуществляется через гейт-пакеты.

Такое взаимодействие позволяет нам иметь одну точку выхода и входа из/в схему, а в случае разделения схем на разные базы данных мы получаем следующую схему взаимодействия:

Подход разделения схемы (пользователя) при проектировании баз данных OLTP

Рисунок 2 — Взаимодействие схем при их распределении по разным базам данных.

Из рисунка видно, что при разделении схем по разным базам данных мы поддерживаем принцип масштабирования, т.е.

2 схемы переносились в разные базы без ущерба для основного функционала.

Давайте представим, какие проблемы могут возникнуть при прямом DML из одной схемы в другую.

Ниже представлена картина распределения грантов при взаимодействии 2-х схем: поддержка текущей структуры масштабирования, безопасность, а также устранение неопределенности в плане поведения системы:

Подход разделения схемы (пользователя) при проектировании баз данных OLTP

Рисунок 3 — Схема распределения грантов при взаимодействии 2-х схем.

Из рисунка видно, что мы запретили DML-операции вставки, обновления, удаления, а также выполнение над объектами из одной схемы в другую, кроме in_gate_package. Мы разрешаем запуск из гейт-пакетов, также возможны запросы с планшетов другой схемы, только в случае проблем с производительностью и необходимости использования планшетов в рамках больших запросов.

В идеале в будущем отключить разрешение выбора относительно таблиц другой схемы и использовать только методы их гейт-пакета.

При таких подходах (рис.

1, 2, 3) получаем:

  • Решение проблемы масштабируемости.

    При распределении схем по разным базам данных проблем не возникает.

  • Решение проблемы безопасности состоит в запрете модификации данных и прямом доступе к методам/объектам модификации первичных данных лицами, не являющимися владельцами этих данных.

  • Решение проблемы прозрачности поведения системы заключается в том, что любая модификация данных происходит через одну точку ввода/вывода внутри одной схемы.

Теги: #проектирование баз данных #база данных #oracle #pl/sql #oracle #программирование #Анализ и проектирование систем
Вместе с данным постом часто просматривают: