gpt4 book ai didi

mysql - 创建了一个 View 但之后失去了对基础表的特权

转载 作者:行者123 更新时间:2023-11-28 23:47:35 25 4
gpt4 key购买 nike

假设有一个关系 Table(A, B, C) 并且我被授予了它的所有权限。我创建了一个查看表 A 的 View V(A)。然后,如果我从表中撤消了所有特权, View 究竟会发生什么?

据我了解, View 是调用时动态创建的表抽象(如果未具体化)。由于我对基础表没有任何权限,因此我无法调用 View V,它需要对基础表具有 SELECT 权限。因此,该 View 实质上已从系统中删除。

我的理解对吗?如果 View 被具体化会怎样?

最佳答案

不,这不完全正确。但是请注意,所有 rdbms 的安全模型都不同。由于您只将 mysql 放入标记列表中,因此我的回答将针对 mysql。

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

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

参见 access control for views在 mysql 文档中了解详细信息。

话虽这么说,如果您碰巧拥有 mysql v5.0.15 或更早版本,那么对底层对象的访问权限只会检查一次:在 View 定义时。

注意:mysql不支持物化 View 。

关于mysql - 创建了一个 View 但之后失去了对基础表的特权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com