Bạn có thể làm điều này với chế độ xem bình thường, miễn là người dùng có liên quan chưa có quyền truy cập vào bảng cơ sở.
VÍ DỤ:
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>
Nếu bạn thu hồi quyền trên các bảng trong câu hỏi & tạo các chế độ xem, cùng với một từ đồng nghĩa cho mỗi chế độ xem người dùng có cùng tên với bảng gốc, thì nó phải trong suốt.
VÍ DỤ:
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>
Bạn cũng có thể làm điều này với Cơ sở dữ liệu riêng ảo , nhưng tôi nghĩ đó là một tùy chọn được cấp phép bổ sung đắt tiền. Bạn sử dụng DBMS_RLS để định cấu hình các chính sách bảo mật có liên quan mà bạn yêu cầu.