gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:09:41 24 4
gpt4 key购买 nike

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

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

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 中的密码会有用呢?

最佳答案

这就是发生的事情。

有了这个

CREATE USER 'Bobby' IDENTIFIED BY '12345';

创建了一个用户。他没有任何权限,只能连接并查看服务器的配置方式以及某些状态变量。当您这样做时,也会发生同样的情况:

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

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

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

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

编辑:我必须纠正自己,不会针对每个查询检查权限。只要用户处于连接状态,就享有连接时所拥有的权利。当用户的权限被撤销时,他必须重新连接才能真正失去权限。

关于mysql - MySQL中创建用户和授予权限的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22256936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com