无法与用户 table 中的 select 行

Can't select rows from table with user

我创建了一个用户并授予他所有权限,我使用了:GRANT ALL PRIVILEGES TO user1; 但后来我尝试从我与管理员用户创建的 table 中 select 行,如下所示: select * from sys.table 它给我一条错误消息 table or view doesn't exist

然后我做了:Grant select on table to user1 并且成功了。

所以所有权限不包括select?

通常情况下,Oracle 使用“大约”一词。

在这种情况下,ALL 并不表示“全部”。来自文档:

所有特权

Specify ALL PRIVILEGES to grant all of the system privileges listed in Table 18-1, except the SELECT ANY DICTIONARY, ALTER DATABASE LINK, and ALTER PUBLIC DATABASE LINK privileges.

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/GRANT.html#GUID-20B4E2C0-A7F8-4BC8-A5E8-BE61BDC41AC3

注意“除外”部分。 “全部”应该表示“全部”,即“无一例外”;然而........

与您的问题相关:ALL PRIVILEGES 不包括 SELECT ANY DICTIONARY。最有可能的是,无论您尝试 select 的 table 或视图是字典 table (或视图);这解释了为什么授予所有权限无效,但直接授予 table/view 访问权限却有效。

如果您想授予对所有词典对象的访问权限,您可以向用户授予 SELECT ANY DICTIONARY。

玩完这些显式授权后,您可能需要考虑将系统 角色 授予需要它们的用户(并且 给那些用户),而不是寻找所有此类异常。