MySQL中创建用户和授予权限的区别

时间:2014-03-07 17:37:41

标签: mysql

我有一个与密码相关的问题:

我们可以创建一个用户并通过这样做为他分配密码:

CREATE USER Bobby IDENTIFIED BY 12345

然后我们也可以通过以下方式授予他权限:

GRANT ALL ON *.* TO Bobby@'localhost' IDENTIFIED BY 'password';

但是,当我们通过执行以下操作更改该用户的密码时:

SET PASSWORD FOR 'Bobby'@'localhost' = PASSWORD('newpassword');

我可以使用这个新密码登录,也可以对数据库进行任何类型的查询。那么,在更新密码时,我们实际上是在更新使用CREATE USER Bobby创建的密码和使用GRANT创建的密码吗?

问题的另一部分是......如果CREATE与GRANT使用的密码不同时使用的密码,则GRANT密码似乎优先。那么,为什么CREATE中的密码对于?

是有用的

1 个答案:

答案 0 :(得分:1)

这是发生的事情。

有了这个

CREATE USER 'Bobby' IDENTIFIED BY '12345';

创建了一个用户。他没有权利,只能连接并查看服务器的配置方式和某些状态变量。执行此操作时也会发生同样的情况:

GRANT USAGE ON *.* TO 'Bobby'@'localhost' IDENTIFIED BY '12345';

您之前甚至不需要CREATE USER声明。如果用户不存在,GRANT语句将创建用户 因为我们使用GRANT语句指定了密码,所以密码也会更改。没有单独的密码或其他。

当您通过GRANT声明或SET PASSWORD更改密码时,您只能使用新密码登录。

虽然为每个查询检查权限,但密码不是!当您不断开连接时,尽管您使用旧密码连接,仍然可以执行您拥有该权限的所有查询。

编辑:我必须自行更正,不会检查每个查询的权限。只要他连接,用户就拥有他连接时的权利。当从用户撤消权限时,他必须重新连接才能真正失去权限。