Схемы авторизации APEX контролируют доступ к компонентам APEX, таким как страницы, регионы, элементы и т. д., но не к строкам ваших данных.
Правильным решением Oracle для этого требования будет виртуальная частная база данных (VPD), который применяет ваши правила ко всем запросам и ограничивает, какие строки может видеть пользователь. Однако для этого требуется Oracle Enterprise Edition.
Простой метод, который будет работать в любой редакции Oracle:
Каждой таблице нужен столбец с идентификатором пользователя, создавшего его, например. CREATED_BY
. Вы можете использовать триггер базы данных, чтобы он всегда заполнялся именем пользователя APEX. (Примечание. Для метода VPD также потребуется этот столбец.)
В каждом запросе отчета вы добавляете фильтр, например:
и e.created_by = :APP_USER
Конечно, всегда есть риск, что вы где-нибудь забудете добавить фильтр. Лучшим решением, позволяющим избежать этого, было бы создание представлений, применяющих фильтр, например.
create view apex_employees as
select * from employees
where created_by = (select v('APP_USER') from dual);
Затем используйте схемы и гранты, чтобы убедиться, что APEX может видеть только представление, а не таблицу. Теперь нет необходимости добавлять фильтры к каждому запросу отчета. Это решение иногда называют «ДПН бедняка».
person
Tony Andrews
schedule
06.02.2018