在多个表上选择权限

时间:2009-09-07 08:37:57

标签: mysql privileges mysql-error-1064 grant

如何在单个语句中为多个表授予select权限?

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

2 个答案:

答案 0 :(得分:1)

您无法在标准SQL中执行此操作。允许多个用户,但只允许一个表。

对于大多数SQL方言来说,这也是正确的。有限制的原因,最明显的是与检查单独表格的权限有关,尽管它们在20世纪80年代可能比现在更具相关性。

答案 1 :(得分: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_%'

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

顺便说一句,代码未经测试(由我)。我是从http://lists.mysql.com/mysql/202610获得的。