无法与用户 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.
注意“除外”部分。 “全部”应该表示“全部”,即“无一例外”;然而........
与您的问题相关:ALL PRIVILEGES 不包括 SELECT ANY DICTIONARY。最有可能的是,无论您尝试 select 的 table 或视图是字典 table (或视图);这解释了为什么授予所有权限无效,但直接授予 table/view 访问权限却有效。
如果您想授予对所有词典对象的访问权限,您可以向用户授予 SELECT ANY DICTIONARY。
玩完这些显式授权后,您可能需要考虑将系统 角色 授予需要它们的用户(并且 仅 给那些用户),而不是寻找所有此类异常。
我创建了一个用户并授予他所有权限,我使用了: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.
注意“除外”部分。 “全部”应该表示“全部”,即“无一例外”;然而........
与您的问题相关:ALL PRIVILEGES 不包括 SELECT ANY DICTIONARY。最有可能的是,无论您尝试 select 的 table 或视图是字典 table (或视图);这解释了为什么授予所有权限无效,但直接授予 table/view 访问权限却有效。
如果您想授予对所有词典对象的访问权限,您可以向用户授予 SELECT ANY DICTIONARY。
玩完这些显式授权后,您可能需要考虑将系统 角色 授予需要它们的用户(并且 仅 给那些用户),而不是寻找所有此类异常。