在MySQL中,GRANT语句中的表名是否可以使用通配符?

5

在MySQL中,是否可以对数据库中的一组表格授予用户GRANT权限,例如允许创建和删除某些表格名称,但不允许其他操作?

以下两种方式都似乎没有效果:

GRANT SELECT ON  `testdb`.`%_testing` TO  'wildcardtest'@'localhost';
GRANT SELECT ON  `testdb`.`testing%` TO  'wildcardtest'@'localhost';

MySQL手册似乎没有明确给出答案。

3个回答

6
GRANT语句中唯一生效的通配符是*。
GRANT SELECT ON `testdb`.* TO 'user'@'localhost';
GRANT SELECT ON *.* TO 'privilegeduser'@'localhost';

要么全部,要么一个都没有;没有动态匹配表名与授予权限的功能。


1
不可以。您可以用逗号分隔表名,但在GRANT中不能使用通配符。

1
创建一个新的空数据库。让它可以访问原始数据库(使用已有原始数据库访问权限的用户)。在这个新数据库中,创建视图“test”,SELECT * from originaldatabase.tablename WHERE条件……。 然后,将test用户授权访问NewDatabase,使用GRANT select on NewDatabase.* to 'testuser'@'localhost' 然后,只为想要test用户访问的表创建视图。 还要记住,在视图的WHERE部分中可以使用USER(): 例如:create view test as select * from original.customer where mysql_user = USER() 在原始.customer中,必须有一个“mysql_user”列,而每一行允许test用户查看的内容,必须在该列中有testuser@localhost的条目 testuser将在数据库“test”中看到所有创建的视图,就像表格一样。

我没有看到这个答案涉及通配符(请参见问题标题)。 - syck
@syck 我认为问题是如何限制用户只能访问原始数据库中的某些表。当仅为要使用的表创建“视图”时,最终用户只能访问NewDatabase中的那些表。 - Jørgen Skoglund Hansen
正如问题标题所述,OP想知道如何使用通配符来访问某些表。授予单个表的权限(或为其创建视图)并不是问题,但有时并不合适。想象一下科学数据,有时会组织成数百或数千个类似的表格。 - syck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接