Ошибка: ORA-00439: Не задействована функциональная возможность: Fine-grained access control Oracle
Хочу сделать защиту на уровне записей (row level security) для таблицы Good.
Создал функцию-фильтр:
create or replace function policy_func (p_schema varchar2, p_object varchar2)
return varchar2 is
begin
if (user = 'USER_ ') then
return 'price > 700';
end if;
return 'price < 200';
end;
Но не получается добавить политику:
Begin
DBMS_RLS.add_policy (
object_schema => 'system',
object_name => 'good',
policy_name => 'clients_policy',
function_schema => 'system',
policy_function => 'policy_func',
statement_types => 'select, insert, update, delete',
update_check => true
);
End;
Получаю ошибку:
2020-12-03 02:02:51] [67000][439]
[2020-12-03 02:02:51] ORA-00439: Не задействована функциональная возможность: Fine-grained
access control
[2020-12-03 02:02:51] ORA-06512: на "SYS.DBMS_RLS_INT", line 23
[2020-12-03 02:02:51] ORA-06512: на "SYS.DBMS_RLS", line 54
[2020-12-03 02:02:51] ORA-06512: на line 2
[2020-12-03 02:02:51] Position: 0
В чем проблема ?
PS моя версия БД 12.2.0.1.0
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Исключение:
ORA-00439: Не задействована функциональная возможность: Fine-grained access control
или:
ORA-00439: feature not enabled: Fine-grained access control
Вызывается в случае, если функциональная опция недоступна в утановленной версии/редакции БД.
Проверить, включенна ли опция, можно запросом:
select parameter, value
from v$option where parameter='Fine-grained access control'
/
PARAMETER VALUE
-------------------------------- ------
Fine-grained access control TRUE
Если value=false, то опция недоступна, а если true, будет работать:
SQL> begin dbms_rls.add_policy (
2 object_schema => 'system',
3 object_name => 'good',
4 policy_name => 'clients_policy',
5 function_schema => 'system',
6 policy_function => 'policy_func',
7 statement_types => 'select, insert, update, delete',
8 update_check => true); end;
9 /
PL/SQL procedure successfully completed.