假设有一个关系表(A,B,C),我得到了它的所有特权。我做了一个视图V( A )查看表的A,那么如果我被取消了表中的所有特权,视图到底会发生什么?
据我所知,视图是在调用时动态创建的表抽象(如果不是物化的)。由于我对基础表没有任何特权,所以无法调用视图V,它需要基础表上的SELECT特权。所以这个视图基本上是从系统中删除的。
我的理解正确吗?如果视图是物化的,会发生什么?
发布于 2015-10-24 23:15:49
不,这不是完全正确的。但是,请注意,安全模型在所有rdbms中都是不同的。因为您只将mysql放到标签列表中,所以我的答案将是mysql特定的。
在mysql中,可以使用create语句中的SQL安全选项定义视图的安全模型。可以将其设置为定义器(定义视图的用户)或调用方(执行视图的用户)。如果将其设置为definer,mysql将检查用户的访问权限,该权限定义了执行视图的视图,而不是用户的访问权限。如果您拥有超级特权,那么您可以使用任何用户帐户作为定义者,而不仅仅是您自己的。
Mysql检查定义者或调用者(基于设置)在引用视图时是否有权访问底层对象。如果视图使用定义器选项,而定义器可以访问底层对象,而您不使用,则视图仍然会给出结果。
有关详细信息,请参阅mysql文档中的视图访问控制。
尽管如此,如果您碰巧有mysql v5.0.15或更早版本,那么对底层对象的访问权限只会检查一次:在视图的定义处。
注: mysql不支持物化视图。
https://stackoverflow.com/questions/33324096
复制相似问题