访问Oracle中的视图

时间:2015-03-26 15:36:26

标签: oracle view oracle11g grant

我需要向用户授予对我的观看次数的权限。但我不希望他们看到创建视图的底层脚本。在甲骨文有可能吗?

SELECT访问没有帮助

1 个答案:

答案 0 :(得分:1)

如果你真的需要屏蔽用户的视图工作,那么你可以为他们编写包装器。

SQL> conn a/a
Connected.
SQL> select * from t23
  2  /

      COL1 C
---------- -
        42 Y
        99 N

SQL> create or replace view private_v23 as
  2     select col1 from t23
  3     where col2 = 'Y'
  4  /

View created.

SQL> create or replace view public_v23 as
  2      select * from private_v23
  3  /

View created.

SQL> grant select on public_v23 to b
  2  /

Grant succeeded.

SQL>

如果我们现在转到用户B,他们可以运行视图,但他们无法看到它如何获取数据:

SQL> conn b/b
Connected.
SQL> select * from a.public_v23
  2  /

      COL1
----------
        42

SQL> select owner, view_name, text 
  2  from all_views
  3  where owner = 'A'
  4  /

OWNER                          VIEW_NAME
------------------------------ ------------------------------
TEXT
-------------------------------------------------------------
A                              PUBLIC_V23
select "COL1" from private_v23


SQL> 

你应该有充分的理由做这种混淆。您正在为您的用户创造更多的生活,因为他们无法理解为什么他们获得他们获得的数据,或者对性能,加入等做出合理的推断。有权访问TOAD的用户可能需要那种类型信息。

另一件事是用户仍然可以钻进视图的底层结构;例如,如果他们可以运行SQL跟踪和tkprof。隐藏视图源并不像混淆PL / SQL代码那样容易。