我需要向用户提供 MySQL 视图和存储例程,但不是底层表

问题描述 投票:0回答:1

我有一个具有多个模式的数据库。这些模式之一包含一些需要对其他模式保持隐藏的数据,同时允许对其他数据进行有限的访问。目的是仅通过视图和存储例程访问数据。
我在 Ubuntu 服务器上使用 MySQL 5.7.33,在 Windows 上使用 MySQL Workbench 8.0。
我的问题是,如何设置架构以使视图等可访问,但不能访问表。
我已向用户授予对受限架构的以下权限。

视图的 CREATE 语句开始:

CREATE 
ALGORITHM = UNDEFINED 
DEFINER = `DBA`@`%` 
SQL SECURITY DEFINER
VIEW `CommonData`.`VW_SystemProperty` AS ...

当我在视图上运行选择时,出现错误:
错误代码:1142。用户 '' 对于表 'VW_SystemProperty' 的 SELECT 命令被拒绝
我错过了什么?

mysql mysql-workbench
1个回答
0
投票

授予执行权限不支持过程名称中使用通配符。您必须一次向一个过程授予权限。

mysql> grant execute on procedure test.* to 'root'@'localhost';
ERROR 1144 (42000): Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used

mysql> grant execute on procedure test.foo to 'root'@localhost;
Query OK, 0 rows affected (0.00 sec)

表名称或视图名称的唯一通配符是

*
。您不能在表名称或视图名称中使用其他通配符,例如
%
_

在 MySQL 5.x 中,您可以在架构名称中使用通配符,但现在已弃用,因为这是一个潜在的安全漏洞。

© www.soinside.com 2019 - 2024. All rights reserved.