Обсуждение статьи тематического каталога: Создание Virtual Private Database в базе данных Oracle. (oracle virtual)Ссылка на текст статьи: http://www.opennet.me/base/dev/vpd_oracle.txt.html
Есть еще вот такая чудная статья на эту же тему:
http://www.devshed.com/c/a/Oracle/RowLevel-Security-with-Vir.../О том же самом, на чуть ином примере и другими словами.
Материала на самом деле навалом, но вот на www.opennet.ru не пробегало.
Не совсем понятно, для чего Оракл ввел дополнительный параметр update_check в процедуре ADD_POLICY, его значение влияет только на операцию INSERT. На update не влияет, что, кстати, проитиворечит документации.Пример:
drop table doc;
create table doc (doc_name,distr) as select rownum||'-й район',rownum from all_tables where rownum<=10;create or replace function FUNCT (object_schema IN VARCHAR2, object_name VARCHAR2)
RETURN VARCHAR2 as
begin
return 'DISTR=3';
end;
/exec DBMS_RLS.DROP_POLICY('Q','DOC','MY_POLICY');
exec DBMS_RLS.ADD_POLICY('Q','DOC','MY_POLICY','Q','FUNCT','update',false);
update doc set doc_name='NEWNAME' where distr=2;
update doc set doc_name='NEWNAME' where distr=3;select * from doc;
ведет себя так же, как и
exec DBMS_RLS.ADD_POLICY('Q','DOC','MY_POLICY','Q','FUNCT','update',true);
update doc set doc_name='NEWNAME' where distr=2;
update doc set doc_name='NEWNAME' where distr=3;
select * from doc;