SELECT ANY TABLE 权限如何在 Oracle 中工作?

How SELECT ANY TABLE privilege work in Oracle?

我想知道特权 SELECT ANY TABLE 在 Oracle 内部是如何工作的。

它是否被视为单一特权?还是相当于为每个 table 制作一个 GRANT SELECT ON MyTable TO MyUser

例如,我想知道这是否可行:

GRANT SELECT ANY TABLE TO PUBLIC;
REVOKE ALL ON MY_TABLE FROM PUBLIC;

在这些查询之后,我是否仍然可以访问任何用户的 MY_TABLE

是的,所有用户仍然可以查询 MY_TABLE

您正在查看不同的 privilege types:

The main types of user privileges are as follows:

  • System privileges—A system privilege gives a user the ability to perform a particular action, or to perform an action on any schema objects of a particular type. For example, the system privilege CREATE TABLE permits a user to create tables in the schema associated with that user, and the system privilege CREATE USER permits a user to create database users.
  • Object privileges—An objectprivilege gives a user the ability to perform a particular action on a specific schema object. Different object privileges are available for different types of schema objects. The privilege to select rows from the EMPLOYEES table or to delete rows from the DEPARTMENTS table are examples of object privileges.

SELECT ANY TABLE 是一种系统权限,允许被授予者:

Query tables, views, or materialized views in any schema except SYS. Obtain row locks using a SELECT ... FOR UPDATE.

当您授予它是一个独立的单一权限时,在 dba_sys_privs 中可见。当 Oracle 决定是否允许用户访问 table 时,它可以首先查看系统权限,如果没有系统,则只继续查找特定对象权限(在 dba_tab_privs 中可见)允许执行操作的权限。

系统权限不会转化为对数据库中每个对象的单独权限——维护它会很糟糕,因为创建一个新对象必须根据系统权限自动确定谁应该被授予权限;这意味着您无法区分该特权和单独授予的特权。因此,例如,如果您明确授予特定 table 的 select 权限,则用户被授予 SELECT ANY TABLE,然后他们又被撤销 SELECT ANY TABLE - 会发生什么以前的明确授权?

您的情况基本相同,只是您指定了要撤销的对象的所有权限。如果这些是唯一涉及的两个命令,那么 PUBLICMY_TABLE 没有明确的特权,所以撤销实际上并没有做任何事情;但是如果授予了 table 的任何明确特权,那么它们将被撤销。不过,这对更高级别的 SELECT ANY TABLE 系统权限没有影响。

特权是累积的;撤销对特定对象的特权不会阻止对该对象的访问,它只会删除一条可能的访问路径。

顺便说一下,希望您使用了一个人为的例子,因为应该谨慎授予如此强大的系统权限,并且 only when really needed. Letting any user query any table in your database potentially blows a big hole in the security model. Again from the docs:

Oracle recommends that you only grant the ANY privileges to trusted users

Oracle recommends against granting system privileges to PUBLIC.

并在 the database security guide 阅读更多内容。