【发布时间】:2016-08-05 20:30:29
【问题描述】:
用户是否需要SELECT /INSERT/DELETE/UPDATE 等视图和基础表的权限才能执行这些操作?或者任何一个表/视图的权限就足够了?
换句话说,假设用户 A 拥有表 T 和视图 V(由 T 构建)。如果用户 B 在 V 上具有 SELECT 权限,如果他在 T 上没有 SELECT 权限,他是否可以执行 SELECT,反之亦然?如果他可以,那是否意味着 View 特权“覆盖”了 table 特权,因为 A 没有给他超过 T 的权利?
更新
在一个相关问题中,同义词怎么样?根据我在一本书中的理解,用户需要SELECT 同义词和基础表的特权。这将不同于视图。
另一方面,Oracle 似乎表明同义词的行为类似于视图。
可以授予用户对同义词或视图的 SELECT 权限 没有被明确授予 SELECT 权限 原始表
更新 2
按照大家的回答,我们只需要视图的权限来选择表(至少视图从表中看到的)并且不需要表的权限,让我们考虑这种情况:
- 表 T 属于 A
- T 到 B 上的 GRANT SELECT(无 GRANT OPTION)
- B 创建视图 V AS SELECT * FROM A.T
- B 在 V 到 C 上授予选择
- C 执行 SELECT * FROM B.V
按照你说的,C可以从V中选择,因此相当于从T中选择。这是作弊吗? B 有效地让 C 看到 A.T,尽管 C 没有 T 的权利并且 B 没有 GRANT OPTION。某处是否存在安全漏洞?
【问题讨论】:
-
您应该区分视图的第三个用户和所有者。当用户使用视图时,他只需要视图所有者授予用户的视图的权限。视图的所有者必须对该视图使用的表具有权限。他必须有权授予这些权限(授予选项)或必须拥有这些表,GRANT
-
让我们有 3 个用户:t_owner 拥有表,v_owner 拥有视图和 n_user。要创建视图,v_owner 需要对视图中使用的表从 t_owner 具有选择权限。要从视图中选择 n_user 需要从视图中选择权限。要授予此特权,v_owner 需要来自 t_owner 的授予。现在应该做的是:从 t_owner GRANT SELECT ON table_name TO v_owner WITH GRANT OPTION; , 从 v_owner GRANT SELECT ON view_name TO n_user;
-
谢谢大家。我已经更新了我的问题以获取更多详细信息。随意详细说明。
标签: oracle view oracle11g privileges synonym