对于某个用户,我在数据库级别上有几个Grants特权语句。如果我运行show grants
,将会看到:
GRANT USAGE ON *.* TO 'user1'@'%'
GRANT INSERT, UPDATE, DELETE, CREATE ON `db1`.* TO 'user1'@'%'
GRANT INSERT, UPDATE, DELETE, CREATE ON `db_with_pattern_\_%`.* TO 'user1'@'%'
GRANT SELECT ON *.* TO 'user1'@'%'
我希望然后最后一行将授予所有模式的user1
SELECT
特权,而前几行将授予INSERT, UPDATE, DELETE, CREATE
特定的模式,因此并且由于最后一行将SELECT授予在所有架构上。
但这是行不通的。但是,当我尝试从某个表db1
或db_with_pattern_\_%
中选择MySQL抛出select denied for user user1
时,user1
仍然可以在数据库中的任何其他架构上运行select。
我浏览了MySQL文档的grant-privileges部分,并且在存在更具体的GRANT语句时并没有对限制通配符特权进行任何澄清。
在授予语句中使用特定模式时,我应该每次都明确指定SELECT还是做错了什么?