SELECT 视图显示 root 用户的数据,但不显示其他用户具有 SELECT 权限的数据

问题描述

即使我们的 SELECT 帐户授予了 testuserdatabaseName.ViewName 权限,SELECT * FROM ViewName 仍返回所有列名称,但返回 0 行数据。

但是当以 root 登录时在 sqlyog 中选择相同的视图时,会显示所有数据行。

我们尝试从视图中提取 SELECT 语句并将其直接作为 testuser 运行,但这导致相同的空表。

是否还有其他权限设置需要我们验证?为什么我们可以SELECT 列名而不是数据行?

我是一名低级员工,无法立即访问数据库权限设置,但如果有要求,我会尽可能快地获取它们。提前致谢!

编辑:SELECT COUNT(*) FROM ViewName 作为 testuser 返回 0

解决方法

您可能将视图定义为以调用它的用户的名义运行,这意味着调用它的用户还必须至少具有 select privilege 到视图引用的列:

当一个视图被引用时,根据 SQL SECURITY 特性分别是 DEFINER 还是 INVOKER,根据视图 DEFINER 帐户或调用者拥有的特权检查视图访问的对象的特权。

如果您不希望引用用户直接访问基础表,那么您需要使用 definer 子句提供一个在创建视图时以其名称运行查询的用户。