- PVSM.RU - https://www.pvsm.ru -
Разделение схем в основе своей реализуется для масштабируемости и безопасности:
Проблематика есть в том что если мы будем давать гранты на модификацию данных не владельцем таблиц (первичных данных), мы получаем пласт проблем:
Решение проблем с масштабируемостью/безопасностью/прозрачностью поведения системы нам поможет:
Рисунок 1 — Взаимодействие схем между друг другом
Из рисунка видно, что схемы взаимодействуют между друг другом посредством GATE_PACKAGE или гейтовых пакетов.
Есть 2 типа гейтовых пакетов:
Все изменения данных осуществляются внутри схемы, прямого DML (insert, update, delete) обращения из чужой схемы (не владелице таблицы) к таблице не происходит.
Обращение из чужой схемы к любым методам/константам/типам и другим объектам также производится через гейтовые пакеты.
Такое взаимодействие позволяет иметь одну точку выхода и входа из/в схему, а в с случае разнесения схем в разные БД, мы получим следующую схему взаимодействия:
Рисунок 2 — Взаимодействие схем при разнесении их в разные БД.
Из рисунка видно, что при разнесении схем в разные БД у нас поддерживается принцип масштабирования, т.е. 2 схемы разнеслись в разные БД без ущерба основному функционалу.
Представим какие проблемы могли возникнуть при прямых DML из одной схемы в другую.
Ниже представлен рисунок раздачи грантов при взаимодействии 2х схем: поддержка текущей структуры масштабирования, безопасности, а также исключение неопределенности с точки зрения поведения системы:
Рисунок 3 — Схема раздачи грантов при взаимодействии 2х схем.
Из рисунка видно что мы запретили DML операции insert, update, delete, а также execute на объекты одной схемы в другую, кроме in_gate_package.
Разрешаем запуск из гейтовых пакетов, а также возможны запросы из табличек другой схемы, только в случае проблем с производительностью и необходимостью использования табличек в рамках больших запросов.
В идеале в дальнейшем запретить грант select относительно таблиц другой схемы и использовать только методы их гейтового пакета.
При таких подходах (рисунок 1, 2, 3), мы получаем:
Автор: Юрий Пухов
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/263893
Ссылки в тексте:
[1] Источник: https://habrahabr.ru/post/337994/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.