MySQL中的“由‘密码’标识”

4jb9z9bj  于 2022-09-18  发布在  Java
关注(0)|答案(5)|浏览(157)

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

例如:

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

我试着在不使用IDENTIFIED BY的情况下使用GRANT,它起作用了。
有人能给我解释一下为什么要用两次吗?是否有针对特定权限的其他密码?

5gfr0r5j

5gfr0r5j1#

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

如果将GRANTIDENTIFIED一起使用,则可以更改用户密码:
如果存在标识,并且您具有全局授予权限(GRANT OPTION),则指定的任何密码都将成为该帐户的新密码,即使该帐户存在并且已有密码也是如此。如果没有标识,帐户密码将保持不变。

从MySQL 5.7.2开始,如果帐户已经存在,则禁止使用标识,因为它仅在创建新帐户时使用。

此外,如果用户不存在,GRANT可能会创建该用户:

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

  • 如果没有启用NO_AUTO_CREATE_USER,则Grant会创建帐户。这是非常不安全的,除非您使用IDENTIFIED BY指定非空密码。
  • 如果启用了NO_AUTO_CREATE_USER,则授权失败并且不创建帐户,除非您使用IDENTIFIED BY指定非空密码或使用IDENTIFIED WITH命名身份验证插件。

从MySQL 5.7.6开始,不建议使用GRANT来定义帐户身份验证特征。相反,应使用CREATE USER或ALTER USER建立或更改身份验证特征。此授权功能将在未来的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';
kxxlusnw

kxxlusnw2#

作为授予自创建用户的权限,下面这行就足够了-

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

注意:IDENTIFY代表您的密码要保存用于凭证验证的密码。

**

  • 新更新:

**现在在mysql8.0中,必须先创建用户才能分配权限,因为Grant命令不会创建新用户。

1.因此,在Mysql5.7之前,您可以通过GRANT命令创建和分配权限,如“GRANT SELECT ON*.to‘User’@‘IP’by‘Pass’;”注:更好的选择是,首先创建用户,然后分配权限,以遵循标准流程。
1.但从Mysql8.0开始,您必须先创建用户,然后才能分配权限,如“CREATE USER‘USER’USER@‘IP’由‘PASS’标识;GRANT SELECT ON
.*to‘USER’@‘IP’;”

y3bcpkx1

y3bcpkx13#

from MySQL 5.7 doc says:
However, use of GRANT to create accounts or define nonprivilege characteristics is deprecated in MySQL 5.7. Instead, perform these tasks using CREATE USER or ALTER USER.

But I can't find that notice or similar message on MySQL 8.0 doc, and I tried:

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

it's returned:

ERROR: You are not allowed to create a user with GRANT

and with identified by :

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

returns:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'passw0rd'' at line 1

MySQL 8.0 doc says:

Normally, a database administrator first uses CREATE USER to create an account and define its nonprivilege characteristics such as its password, whether it uses secure connections, and limits on access to server resources, then uses GRANT to define its privileges. ALTER USER may be used to change the nonprivilege characteristics of existing accounts

if you want to create user and grand the privilege use:

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

if want to update the password first use alter:

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

ego6inou4#

尝试了你的想法,不得不稍微修改一下才能正常运行。不知道如何/为什么,但它是有效的。

CREATE DATABASE radius_db;

CREATE USER 'radius_user'@'localhost' IDENTIFIED BY 'Somestrongpassword_321';

GRANT ALL PRIVILEGES ON radius_db.* TO 'radius_user'@'localhost';

FLUSH PRIVILEGES;

quit;
lymgl2op

lymgl2op5#

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

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

相关问题