1

如何在单个语句中授予对多个表的选择权限?

mysql> grant select on dbName.crw_changes to sink;
Query OK, 0 rows affected (0.02 sec)

mysql> grant select on dbName.crw_changes, dbName.bs_services to sink;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' dbName.bs_services at line 1
4

2 回答 2

1

你不能在标准 SQL 中做到这一点。允许多于一个用户,但只允许一个表。

对于大多数 SQL 方言,这通常也是如此。限制是有原因的,最明显的是与检查单独表的权限有关,尽管它们在 1980 年代可能比现在更相关。

于 2009-09-07T08:44:22.377 回答
1

你不能。GRANT SELECT 一次只能在一张表上工作。

但是,有一种解决方法。您可以执行以下操作:

SELECT   CONCAT('GRANT SELECT ON test.', TABLE_NAME, ' to ''foouser'';')
FROM     INFORMATION_SCHEMA.TABLES
WHERE    TABLE_SCHEMA = 'test'
          AND TABLE_NAME LIKE 'foo_%'

上面提取了以 'foo_' 开头的 'test' 模式中的表并将它们打印出来。然后,您可以获取这些名称并将它们复制并粘贴到存储过程或查询构建器窗口中并执行它们。

顺便说一句,代码未经测试(我)。我从http://lists.mysql.com/mysql/202610拿走了它。

于 2009-09-07T08:46:53.623 回答