Мне нужна помощь с функцией Oracle RLS. Я никогда не использовал его раньше, но провел некоторые онлайн-исследования по этому поводу, однако я столкнулся с проблемой.
Вот шаги, которые я предпринял:
1 - Создать функцию:
create or replace function
table_access_policy
(obj_schema varchar2, obj_name varchar2) return varchar2
is
v_project varchar2(2000);
begin
v_project:= '(select project from users where user_name = (select sys_context(''userenv'',''session_user'') from dual))';
return 'project = ' || v_project;
end;
2- Добавить политику безопасности
Begin
DBMS_RLS.ADD_POLICY ('db1', 'data', 'access_policy', 'admin', 'table_access_policy', 'SELECT' );
End;
3 - Запустить простой запрос на выборку для объекта
select * from db1.data
Когда я делаю шаг 3, я получаю следующую ошибку:
ORA-28113: в предикате политики есть ошибка
28113. 00000 - «в предикате политики есть ошибка»
* Причина: функция политики генерирует недопустимый предикат.
* Действие: просмотрите файл трассировки для получения подробной информации об ошибке.
Ошибка в строке: 5 столбец: 14
Я не знаю, что может быть не так с функцией безопасности. Я успешно использовал его вручную в схеме db1 следующим образом:
select * from data
where project = (select project from users where user_name = (select sys_context('userenv','session_user') from dual))
Есть мысли ??