"在MySQL中识别'密码'"

use*_*823 22 mysql privileges grant

我经常在许多MySQL教程中看到人们IDENTIFIED BY 'password'在用户创建期间使用命令并授予他权限.

例如:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)

我尝试使用GRANT没有IDENTIFIED BY,它的工作原理.
有人能解释一下为什么它会被使用两次吗?特定权限可以有其他密码吗?

Sys*_*dox 33

GRANT用于向用户添加权限.令人困惑的是,它还能够创建用户并更改其密码.不推荐使用此功能,不应使用此功能.

如果您使用GRANT,IDENTIFIED您可以更改用户的密码:

如果存在IDENTIFIED并且您具有全局授予权限(GRANT OPTION),则指定的任何密码都将成为该帐户的新密码,即使该帐户存在且已有密码也是如此.如果没有IDENTIFIED,帐户密码将保持不变.

从MySQL 5.7.2开始,如果该帐户已存在,则禁止使用IDENTIFIED WITH,因为它仅用于创建新帐户时使用.

此外,GRANT如果用户不存在,可以创建用户:

如果GRANT语句中指定的帐户不存在,则采取的操作取决于NO_AUTO_CREATE_USER SQL模式:

  • 如果未启用NO_AUTO_CREATE_USER,GRANT将创建该帐户.除非您使用IDENTIFIED BY指定非空密码,否则这是非常不安全的.
  • 如果启用了NO_AUTO_CREATE_USER,GRANT将失败并且不会创建帐户,除非您使用IDENTIFIED BY指定非空密码或使用IDENTIFIED WITH命名身份验证插件.

自MySQL 5.7.6起,不推荐使用GRANT来定义帐户身份验证特性.而是使用CREATE USER或ALTER USER建立或更改身份验证特征.此GRANT功能将在未来的MySQL版本中删除.

请参阅https://dev.mysql.com/doc/refman/5.7/en/grant.html

总之,用于CREATE创建用户,并用于GRANT添加权限:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost'; 
Run Code Online (Sandbox Code Playgroud)

  • wordpress 手册仍在使用该语法,而我全新的 MySQL 安装不接受它。花了我两个小时。 (2认同)

Zaf*_*lik 5

因此,作为授予自己创建的用户,下面的行足以满足权限-

GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)

注意:“识别”代表您的密码,您要保存用于凭证验证的密码。

  • 在MySQL 5.7中,此功能令人困惑且已弃用。密码应使用“ CREATE USER”或“ ALTER USER”设置。 (4认同)

Muh*_*kur 5

来自MySQL 5.7 文档说:

但是,MySQL 5.7 中不推荐使用 GRANT 创建帐户或定义非特权特征。相反,请使用 CREATE USER 或 ALTER USER 执行这些任务。

但我在MySQL 8.0 doc上找不到该通知或类似消息,我尝试了:

grant all privileges on dbname . * to newuser@localhost;
Run Code Online (Sandbox Code Playgroud)

它被返回:

错误:不允许您使用 GRANT 创建用户

并由以下标识:

grant all privileges on dbname . * to newuser@localhost  identified by 'passw0rd';
Run Code Online (Sandbox Code Playgroud)

返回:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行“ide​​ntified by 'passw0rd'”附近使用的正确语法

MySQL 8.0 文档说:

通常,数据库管理员首先使用 CREATE USER 创建帐户并定义其非特权特征,例如密码、是否使用安全连接以及对服务器资源的访问限制,然后使用 GRANT 定义其特权。ALTER USER 可用于更改现有帐户的非特权特征

如果您想创建用户并授予权限,请使用:

CREATE USER 'user'@'localhost' IDENTIFIED BY 'passw0rd';
GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost'; 
Run Code Online (Sandbox Code Playgroud)

如果想更新密码,请先使用 alter:

ALTER USER 'user'@'localhost' IDENTIFIED BY 'passw0rd';
GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost'; 
Run Code Online (Sandbox Code Playgroud)