관련된 사용자가 아직 기본 테이블에 액세스 할 수없는 한 일반보기로이를 수행 할 수 있습니다.
EG :
SQL> create user reportuser identified by reportuser;
User created.
SQL> grant create session to reportuser;
Grant succeeded.
SQL> grant create synonym to reportuser;
Grant succeeded.
SQL> select user from dual;
USER
------------------------------
PHIL
SQL> create table basetable
(
id number primary key,
viewable varchar2(30),
secret varchar2(30)
);
Table created.
SQL> insert into basetable values ( 1, 'hello world','this is secret' );
1 row created.
SQL> commit;
Commit complete.
SQL> create view reportview
as
select id, viewable
from basetable;
View created.
SQL> grant select on reportview to reportuser;
Grant succeeded.
SQL> conn reportuser/reportuser
Connected.
SQL> select * from phil.basetable;
select * from phil.basetable
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select secret from phil.basetable;
select secret from phil.basetable
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select * from phil.reportview;
ID VIEWABLE
---------- ------------------------------
1 hello world
SQL>
문제의 테이블에 대한 권한을 취소하고 원래 테이블과 이름이 같은 각 사용자보기에 대한 동의어와 함께보기를 작성하는 경우 투명해야합니다.
EG :
SQL> select user from dual;
USER
------------------------------
REPORTUSER
SQL> create synonym basetable for phil.reportview;
Synonym created.
SQL> select * from basetable;
ID VIEWABLE
---------- ------------------------------
1 hello world
SQL>
Virtual Private Database를 사용 하여이 작업을 수행 할 수도 있지만 비싼 추가 라이센스 옵션이라고 생각합니다. DBMS_RLS를 사용하여 필요한 관련 보안 정책을 구성하십시오.