我经常在许多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
,它起作用了。
有人能给我解释一下为什么要用两次吗?是否有针对特定权限的其他密码?
5条答案
按热度按时间5gfr0r5j1#
GRANT
用于向用户添加权限。令人困惑的是,它还具有创建用户和更改密码的能力。此功能已弃用,不应使用。如果将
GRANT
与IDENTIFIED
一起使用,则可以更改用户密码:如果存在标识,并且您具有全局授予权限(GRANT OPTION),则指定的任何密码都将成为该帐户的新密码,即使该帐户存在并且已有密码也是如此。如果没有标识,帐户密码将保持不变。
从MySQL 5.7.2开始,如果帐户已经存在,则禁止使用标识,因为它仅在创建新帐户时使用。
此外,如果用户不存在,
GRANT
可能会创建该用户:如果GRANT语句中指定的帐户不存在,则采取的操作取决于NO_AUTO_CREATE_USER SQL模式:
从MySQL 5.7.6开始,不建议使用GRANT来定义帐户身份验证特征。相反,应使用CREATE USER或ALTER USER建立或更改身份验证特征。此授权功能将在未来的MySQL版本中删除。
见https://dev.mysql.com/doc/refman/5.7/en/grant.html
总之,使用
CREATE
创建用户,使用GRANT
添加权限:kxxlusnw2#
作为授予自创建用户的权限,下面这行就足够了-
注意: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’;”
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:
it's returned:
ERROR: You are not allowed to create a user with GRANT
and with identified by :
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:
if want to update the password first use alter:
ego6inou4#
尝试了你的想法,不得不稍微修改一下才能正常运行。不知道如何/为什么,但它是有效的。
lymgl2op5#
这只是一种额外的安全措施。对于不同服务器上的同一用户,您可能有不同的密码,例如在共享主机环境中。如果它是您自己的服务器,并且您和您的同事是唯一使用它的人,那么您不需要识别您向其授予特权的用户。
如果您标识用户,则只有您指定的密码才能与该用户一起使用来执行这些权限。