MySQL中使用数据库名通配符的GRANT命令?

47

我想创建一个名为 'projectA' 的用户,该用户对每个名字以 'projectA_%' 开头的数据库具有相同的权限。

我知道这是可能的,但是MySQL不喜欢我的语法:

grant all on 'projectA\_%'.* to 'projectA'@'%';

参考资料: http://dev.mysql.com/doc/refman/5.1/en/grant.html

3个回答

90

如果我在语法中使用反引号而不是单引号,它似乎可以正常工作:

grant all on `projectA\_%`.* to `projectA`@`%`;

5
反引号仅在数据库名称中需要,而不是用户。 - glarrain
1
当我使用“特定表名”而不是“*”时,这对我无效,例如grant all on `projectA%`.`some_table%` to `some_user`@`%`; - Nam G VU
@NamGVU 在指定表级别权限时,数据库中的通配符被视为字符_和%。它们不再是通配符。请参阅“对象引用指南”下的GRANT文档。 - mhost

15
GRANT ALL PRIVILEGES ON `projectA\_%`.* TO 'projectA'@'%' IDENTIFIED BY 'your_passwd';

数据库名称需要使用反引号。

编辑:现在下划线已被转义。


8

根据MySQL的GRANT文档:

在授予全局或数据库级别权限的GRANT语句中,指定数据库名称时允许使用“_”和“%”通配符。这意味着,例如,如果您想将“_”字符作为数据库名称的一部分使用,则应在GRANT语句中将其指定为“\_”,以防止用户能够访问与通配符模式匹配的其他数据库;例如,GRANT ... ON `foo\_bar`.* TO ....


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