用户是否需要视图上的SELECT /INSERT/DELETE/UPDATE
等权限以及基础表上的权限才能执行这些操作?或者EITHER表/视图的权限就足够了?
换句话说,考虑拥有表T和视图V(由T构造)的用户A. V上的SELECT
用户B可以执行SELECT
,如果他在T上没有SELECT
,反之亦然吗?如果可以的话,那不意味着View特权"覆盖"表格特权,因为A没有让他对T?
更新
在相关问题中,同义词怎么样?根据我在书中的理解,用户需要同义词和基础表上的SELECT
权限。这与观点不同。
另一方面,Oracle似乎表明同义词的行为类似于视图。
可以为用户授予同义词或视图的SELECT权限 没有被明确授予SELECT权限 始发表
更新2
按照大家的回答我们只需要视图上的权限来选择表(至少是视图中从表中看到的内容)并且不需要表上的权限,让我们考虑这种情况:
- 表T属于A
- 在T到B上的GRANT SELECT(没有GRANT选项)
- B根据选择*从A.T
创建视图- B GRANT SELECT ON V TO C
- C执行SELECT * FROM B.V
根据你所说的,C将能够从V中选择,因此相当于从T中选择。这是作弊吗? B实际上让C看到A.T虽然C在T上没有权利而B没有GRANT OPTION。某处有安全漏洞吗?
答案 0 :(得分:2)
观点的一个基本用途是保护隐私。基表可能包含某些用户不需要查看的机密信息(例如,在员工表中,您可能有薪水)。某些用户需要访问查询(选择)或仅更新基表中的某些字段,而无需访问完整信息。例如:选择电话号码或更新地址(但无法查看工资或奖金)。然后,人们将创建一个视图,并仅为视图提供这些用户“选择”和“更新”权限,而不是在基表上。 (select仍然违反基表,但COLUMNS将仅限于视图中包含的那些...可以/将对基表进行更新,但同样,仅对视图中包含的列中的值进行更新。 )视图不仅可以限制列,还可以限制行 - 例如,在视图中使用WHERE子句,您可以完全从视图中排除CEO。
因此,视图的主要用途之一正是基于此:某些用户可能对视图具有特权,但在基表上没有特权。
答案 1 :(得分:1)
是。通常,视图作为视图所有者运行,并且用户以视图的权限运行。因此用户b只需要访问视图。
但是,在查看此类问题时,您可能还需要查看行级安全性。这通过将对表的一部分的访问权限授予给定用户或组(即,在查询结束时有效地强制执行where子句)来工作。根据您的使用情况,管理可能更简单或更复杂。