在Oracle中访问视图

在Oracle中访问视图,oracle,view,oracle11g,grant,Oracle,View,Oracle11g,Grant,我需要向用户授予访问我的视图的权限。但是我不想让他们看到创建视图的底层脚本。在甲骨文中可能吗 选择访问没有帮助如果您确实需要对用户屏蔽视图的工作,那么您可以为用户编写包装 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

我需要向用户授予访问我的视图的权限。但是我不想让他们看到创建视图的底层脚本。在甲骨文中可能吗


选择访问没有帮助

如果您确实需要对用户屏蔽视图的工作,那么您可以为用户编写包装

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代码那么容易。

为什么
SELECT
access没有帮助?当我授予SELECT访问权限时,他们也可以看到脚本。他们如何看到底层脚本?不同的工具(或脚本)查询不同的数据字典表。如果您对视图具有
选择
访问权限或对过程具有
执行
访问权限,则可以从数据字典中查看源。但是,大多数工具不会向您显示源代码。我们使用TOAD,当用户选择“脚本”选项卡时,他们可以看到底层脚本。