Задача
Модифицируйте существующее приложение для использования мультитенантного подхода. Должна быть возможность создания арендаторов, и в сеансе каждого пользователя должен быть указан ровно один активный арендатор. Каждый арендатор должен видеть и обновлять только свой раздел схемы базы данных.
подход
- Создание контекста приложения Oracle, содержащего идентификатор клиента
- Добавление столбца идентификатора арендатора в любую таблицу, которая должна быть ограничена
- Создать функцию предиката, которая возвращает "tenant_id = sys_context ('tenant_context', 'tenant_id')" для SELECT, INSERT, UPDATE и delete
- Добавить соответствующую политику через dbms_rls для регистрации функции предиката
Это работает как брелок, не касаясь существующего приложения для SELECT, UPDATE и DELETE
Вопрос
При вставке столбца tenant_id не устанавливается и возникает исключение безопасности. Есть ли какой-либо способ, который так же гладок, как функция предиката, всегда устанавливать поля, связанные с безопасностью? Я бы предпочел не добавлять триггеры в 300+ таблиц.