所以我知道类似的问题已被问到,但就我所知,从来没有任何完全相同的问题。基本上我有我的主root用户可以访问所有内容,然后我希望第二个用户可以访问localhost上的所有内容,除了一个数据库。从技术上讲,我想删除他们对所有带有前缀的数据库的访问权限,但我想我会从一开始。我发现的问题是我想要限制的数据库可能会随着时间的推移而改变,但它们总是会有一个前缀。反正,
通常设置一个有权访问我所做的一切的用户
GRANT ALL PRIVILEGES ON *.* TO 'miniroot'@'localhost' WITH GRANT OPTION;
这样,如果我创建一个新的数据库miniroot将始终具有访问权限,这很好。但是我有一些前缀为' PRIVATE'的表格。我想miniroot无法访问这个。
我在这里看到了一个关于如何撤销数据库访问权限的答案
REVOKE all on PRIVATE.* from 'miniroot'@'localhost';
然而这不起作用,并说ERROR 1141 (42000): There is no such grant defined for user 'miniroot' on host 'localhost'
这是真的,我需要我的miniroot才能访问新的数据库,因为它们不是特定的集合。所以我不能从集合中删除一个。我对如何使这项工作有任何想法?
答案 0 :(得分:1)
好吧,
您可以使用通配符%和_来匹配模式:
您可以使用与想要完成的内容相反的方法
CREATE USER 'jeffrey'@'%' IDENTIFIED BY 'password';
GRANT ALL ON `public%`.* TO 'jeffrey'@'%';
因此用户只能访问只有前缀为public 的模式,其他名称为private或任何不会被访问的名称