ALL_COL_COMMENTS 不是 return 给定某个用户的所有 table 个对象

ALL_COL_COMMENTS doesn't return all table objects given a certain user

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

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

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

但是,如果我以不同的用户身份登录,相同的查询将 return 一些 这些表,但不是全部。

为什么 ALL_COL_COMMENTS return 不考虑用户的相同结果集?

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

这是 Oracle 一贯实施的安全基本原则 - 如果您对某个对象没有任何权限,那么就您而言,该对象不存在。根据 "a need to know basis" 的原则,泄露有关它的任何信息都是安全漏洞。

数据字典没有什么不同 - 如果您对 table 没有任何权限,您甚至不能查询有关它的结构信息(例如,当数据字典存在时) .就你而言,没有这样的 table.

不应该 return 相同的结果集而不考虑用户。 documentation for ALL_TAB_COMMENTS 表示:

ALL_TAB_COMMENTS displays comments on the tables and views accessible to the current user.

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

The introduction to the static data dictionary views 更清楚:

Many data dictionary tables have three corresponding views:

An ALL_ view displays all the information accessible to the current user, including information from the current user's schema as well as information from objects in other schemas, if the current user has access to those objects by way of grants of privileges or roles.

A DBA_ view displays all relevant information in the entire database. DBA_ views are intended only for administrators. They can be accessed only by users with the SELECT ANY DICTIONARY privilege. This privilege is assigned to the DBA role when the system is initially installed.

A USER_ view displays all the information from the schema of the current user. No special privileges are required to query these views.

如果您的 'other' 用户看不到这些视图中的表,那么它对它们没有任何权限。他们只能看到他们 拥有权限的那些。这是故意的,因为@Mureinik 提到的原因。