views/synonyms 上的特权与基础表上的特权

Privileges on views/synonyms vs on underlying tables

参考here and here

用户是否需要 SELECT /INSERT/DELETE/UPDATE 等对视图和基础 table 的特权才能执行这些操作?或者 EITHER table/view 的特权就足够了吗?

换句话说,假设用户 A 拥有 table T 和视图 V(从 T 构建)。在 V 上具有 SELECT 权限的用户 B 如果在 T 上没有 SELECT 权限,他是否可以执行 SELECT,反之亦然?如果他可以,那岂不是意味着查看权限 "overrides" 和 table 权限,因为 A 没有授予他对 T 的权利?

更新

在相关问题中,同义词怎么样?根据我在书中的理解,用户需要对同义词和基础 table 的 SELECT 权限。这将与视图不同。

另一方面,Oracle 似乎表明同义词的行为类似于视图。

A user can be granted the SELECT privilege on a synonym or a view without being explicitly granted the SELECT privilege on the originating table

更新 2

根据每个人的回答,我们只需要 select table 的视图权限(至少从 table 看到的视图)而不需要 [=47] 的权限=] 是必需的,让我们考虑这种情况:

  • Table T belongs to A
  • A GRANT SELECT ON T to B (without GRANT OPTION)
  • B CREATE VIEW V AS SELECT * FROM A.T
  • B GRANT SELECT ON V TO C
  • C performing SELECT * FROM B.V

按照你说的,C可以从Vselect,相当于从Tselect,是作弊吗? B 有效地让 C 看到 A.T 尽管 C 没有 T 的权利并且 B 没有 GRANT OPTION。某处是否存在安全漏洞?

视图的基本用途之一是保护隐私。基地 table 可能有某些用户不需要看到的机密信息(例如,在员工 table 中,您可能有薪水)。某些用户需要访问查询 (select) 或更新基础 table 中的某些字段,而无法访问完整信息。例如:select phone 号码,或更新地址(但无权查看工资或奖金)。然后将创建一个视图并仅授予这些用户 "select" 和 "update" 视图的权限,而不是基础 table 的权限。 (select 仍然违背基础 table,但 COLUMNS 将仅限于视图中包含的内容...更新 can/will 对基础 table,但同样,仅针对视图中包含的列中的值。)视图不仅可以限制列,还可以限制行 - 例如,在视图中使用 WHERE 子句,您可以将 CEO 完全排除在视图之外。

因此,视图的主要用途之一正是基于此:某些用户可能对视图拥有特权,但对基础没有特权table。

是的。通常视图以视图所有者的身份运行,用户以视图的权限运行。所以用户b只需要访问视图。

但是,在查看此类问题时,您可能还想查看行级安全性。这是通过向给定用户或组授予对 table 的一部分的访问权限(即在查询结束时有效地执行 where 子句)来实现的。根据您的用例,管理起来可能更简单或更复杂。