给定某个用户的ALL_COL_COMMENTS不会返回所有表对象

时间:2016-07-26 15:00:27

标签: sql oracle oracle11g data-dictionary

以架构所有者身份登录后,我可以运行查询

select * from ALL_COL_COMMENTS WHERE TABLE_NAME LIKE 'BLEH_%';

我可以看到我期望的所有表格和列。

但是,如果我以其他用户身份登录,则同一查询将返回这些表的某些,但不是全部。

无论用户是谁,为什么ALL_COL_COMMENTS都不会返回相同的结果集?

所有这些表(架构所有者)的所有者都是相同的。另一个用户可以在ALL_COL_COMMENTS中看到这些表的子集,但就其而言,其他表不存在。

2 个答案:

答案 0 :(得分:3)

这是安全性的基本原则,Oracle一致地实现 - 如果您对某个对象没有任何权限,就您而言,它不存在。如果你愿意的话,根据“需要知道基础”的原则泄露任何有关它的信息是一种安全漏洞。

数据字典也不例外 - 如果您对表没有任何权限,您甚至无法查询有关它的结构信息(例如,作为数据字典存在)。就你而言,没有这样的表格。

答案 1 :(得分:3)

不管用户如何,都不应该返回相同的结果集。 documentation for ALL_TAB_COMMENTS说:

  

ALL_TAB_COMMENTS显示对当前用户可访问的表和视图的注释。

其他ALL_*表格中显示了类似的评论,它们显示了USER_*ALL_*DBA_*版本之间的差异。

The introduction to the static data dictionary views让它更清晰:

  

许多数据字典表有三个相应的视图:

     

ALL_视图显示当前可访问的所有信息   user,包括来自当前用户架构的信息以及   来自其他模式中对象的信息(如果当前用户具有)   通过授予特权或角色来访问这些对象。

     

DBA_视图显示整个数据库中的所有相关信息。   DBA_次观看仅适用于管理员。他们可以访问   仅限具有SELECT ANY DICTIONARY权限的用户使用。这个特权   在最初安装系统时分配给DBA角色。

     

USER_视图显示来自模式的所有信息   当前用户。查询这些视图不需要特殊权限。

如果您的“其他”用户无法在这些视图中看到这些表,那么它就没有任何权限。他们只能看到他们拥有特权的人。这是故意的,因为@Mureinik指的是。