以架构所有者身份登录后,我可以运行查询
select * from ALL_COL_COMMENTS WHERE TABLE_NAME LIKE 'BLEH_%';
我可以看到我期望的所有表格和列。
但是,如果我以其他用户身份登录,则同一查询将返回这些表的某些,但不是全部。
无论用户是谁,为什么ALL_COL_COMMENTS
都不会返回相同的结果集?
所有这些表(架构所有者)的所有者都是相同的。另一个用户可以在ALL_COL_COMMENTS
中看到这些表的子集,但就其而言,其他表不存在。
答案 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指的是。