创建了一个视图,但之后失去了对基础表的特权

时间:2015-10-24 22:37:33

标签: mysql sql relational-database

假设有关系表(A,B,C),我获得了所有权限。我查看表A的视图V(A)然后如果我从表中撤销了所有权限,视图究竟发生了什么?

据我所知,视图是在调用时动态创建的表抽象(如果没有实现)。由于我对基础表没有任何权限,因此我无法调用视图V,它需要对基础表具有SELECT权限。因此,视图基本上已从系统中删除。

我的理解是否正确?如果视图具体化会发生什么?

1 个答案:

答案 0 :(得分:1)

不,这不完全正确。但请注意,所有rdbms中的安全模型都不同。由于你只将mysql放入标签列表,我的答案将是mysql特定的。

在mysql中,您可以使用create view语句中的SQL SECURITY选项为视图定义安全模型。这可以设置为DEFINER(用户,定义视图的用户)或INVOKER(用户,执行视图的用户)。如果设置为definer,则mysql将检查用户的访问权限,该用户定义了视图,而不是用户的访问权限。如果您拥有SUPER权限,那么您可以使用任何用户帐户作为定义者,而不仅仅是您自己的帐户。

当引用视图时,Mysql会检查定义者或调用者(基于设置)是否可以访问基础对象。如果视图使用定义器选项并且定义者可以访问基础对象而您没有,则视图仍会为您提供结果。

有关详细信息,请参阅mysql文档中的access control for views

话虽这么说,如果您碰巧拥有mysql v5.0.15或更早版本,那么只能检查基础对象的访问权限一次:在视图的定义中。

注意:mysql不支持物化视图。