我有一个具有多个模式的数据库。这些模式之一包含一些需要对其他模式保持隐藏的数据,同时允许对其他数据进行有限的访问。目的是仅通过视图和存储例程访问数据。
我在 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> 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 中,您可以在架构名称中使用通配符,但现在已弃用,因为这是一个潜在的安全漏洞。