我的任务很简单,我想在 MySQL 服务器中创建一个拥有所有权限但不包括创建其他用户的能力的用户。
我尝试通过 root 帐户创建用户。然后我给了他所有的权限,然后我撤销了这个新用户的“创建用户”权限,然后我“刷新了权限”。我认为这就足够了,但是当我使用新用户登录时,我能够创建另一个用户。
这些是我在我的 root 帐户中用于创建新用户并赋予他除“创建用户”权限之外的权限的代码:
create user 'user91'@'localhost' identified by 'google';
grant all privileges on *.* to 'user91'@'localhost';
revoke create user on *.* from 'user91'@'localhost';
flush privileges;
在此之后,我退出了 root 帐户并使用“user91”帐户登录,并尝试使用以下代码创建另一个用户:
create user 'slim2000'@'localhost' identified by 'stealth';
并且这段代码有效,我应该在第一块代码中添加什么以防止“user91”创建其他用户。
这有效:
作为根:
然后,在
sport
架构上,授予ALL
myuser退出,然后以新用户身份登录
myuser
显示 myuser 可以看到的所有模式
此服务器上还有更多模式 - 只是 myuser 看不到它们。
然后,尝试创建一个用户为 myuser。
失败。
但是,我可以做到这一点。
看看这里、这里和这里的三个答案,以便更好地了解正在发生的事情。创建后总是测试你的用户——给用户过多的权力很容易。
您也可以这样做(也许是更优雅的解决方案)
最后,您可以从这个答案
CREATE USER
中删除特权(当然还有),以拥有一个“超级用户”,除了创建新用户之外,他可以做任何事情。WITH GRANT OPTION
我认为@sqlbot 可能已经找出了问题的根源。