“在MySQL中识别'密码'”

时间:2015-06-29 09:12:00

标签: 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';

我尝试使用GRANT而不使用IDENTIFIED BY并且它有效 有人能解释一下为什么它会被使用两次吗?是否可以为特定权限设置其他密码?

5 个答案:

答案 0 :(得分:24)

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

如果您将GRANTIDENTIFIED一起使用,则可以更改用户密码:

  

当存在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'; 

答案 1 :(得分:4)

由于赠款自我创造了用户,因此下线足以获得权利 -

GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost' IDENTIFIED BY 'password';

注意:识别代码表示您要为保存凭证验证保存的密码。

答案 2 :(得分:1)

来自 MySQL 5.7 doc 说:

<块引用>

但是,使用 GRANT 创建帐户或定义非特权 特性在 MySQL 5.7 中已弃用。相反,执行这些 使用 CREATE USER 或 ALTER USER 的任务。

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

grant all privileges on dbname . * to newuser@localhost;

它返回了:

<块引用>

错误:您不能使用 GRANT 创建用户

并以 :

标识
grant all privileges on dbname . * to newuser@localhost  identified by 'passw0rd';

返回:

<块引用>

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本以使用正确的语法 靠近第 1 行的 'passw0rd'' 标识

MySQL 8.0 文档说:

<块引用>

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

如果要创建用户并授予特权使用:

CREATE USER 'user'@'localhost' IDENTIFIED BY 'passw0rd';
GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost'; 

如果想更新密码先用alter:

ALTER USER 'user'@'localhost' IDENTIFIED BY 'passw0rd';
GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost'; 

答案 3 :(得分:0)

这只是一项额外的安全措施。您可能在不同服务器上为同一用户使用不同的密码,例如在共享主机环境中。如果它是您自己的服务器,并且您和您的同事是唯一使用它的人,则您不需要识别您授予权限的用户。

如果您识别用户,则只有您指定的密码才能与该用户一起使用以执行这些权限。

答案 4 :(得分:-1)

以下代码提供对所有数据库的完全访问权限。如果您在mysql服务器中具有特定的数据库,则答案中提到的其他命令也可以使用。不管服务器处于什么状态,下面的代码都可以工作。只需登录linux服务器->输入mysql并输入:

GRANT ALL privileges ON *.* TO 'user'@'host'  identified BY 'password';