【问题标题】:select privilege on more than one table在多个表上选择权限
【发布时间】:2009-09-07 08:37:57
【问题描述】:

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

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

【问题讨论】:

  • 如果您查看了之前问题的答案并接受了其中至少几个问题的答案,那将是一件好事。

标签: mysql privileges mysql-error-1064 sql-grant


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你不能。 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 那里拿到的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-23
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多