微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 子句提供一个在创建视图时以其名称运行查询的用户。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。