> 数据库 > MySQL >

MySQL5.7 创建用户时出现ERROR 1054 (42S22): Unknown column 'password' in 'field list'

问题描述
小白初学MySQL,创建用户这一步,发现根据原教程的步骤输入以下代码会出现报错

mysql> insert into user
    -> (host,user,password,select_priv,insert_priv,update_priv)
    -> values('localhost','clover',PASSWORD('clover123'),'y','y','y');

报错信息为

ERROR 1054 (42S22): Unknown column 'password' in 'field list'  

错误原因
在 MySQL5.7 中 user 表的 password 已换成了authentication_string。
password() 加密函数已经在 8.0.11 中移除了,可以使用 MD5() 函数代替。

解决办法
现在尝试用新方法创建用户,代码如下

mysql> create user 'clover'@'localhost' identified by 'clover123';
Query OK, 0 rows affected (0.00 sec)

通过这行代码我们创建了一个名为“clover”的用户,host的值是“localhost”,这个用户通过“123”鉴别,换句话说这个“123”就是密码。

然后我们可以指定这个用户的权限,在这我就授予clover五个权限叭,分别是:select_priv, insert_priv, delete_priv, create_priv, drop_priv, 代码如下

mysql> grant select,insert,delete,create,drop on *.* to 'clover'@'localhost' with grant option;
Query OK, 0 rows affected (0.00 sec)

刷新生效,代码如下。

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

上面这个命令执行后会重新载入授权表。如果你不使用该命令,你就无法使用新创建的用户来连接mysql服务器,除非你重启mysql服务器。

验证结果
输出user表中host、user和authentication_string的信息,代码如下

mysql> select host,user,authentication_string from user;
+-----------+-----------+-------------------------------------------+
| host      | user      | authentication_string                     |
+-----------+-----------+-------------------------------------------+
| localhost | root      | *43F663C76794F376514023A48A1F53DBDEC540F3 |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | clover    | *664D2BC607BAA85C7DCA8E655CAB8BCE97951607 |
+-----------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

我们可以看到刚刚添加的用户clover在这里成功显示出来了。需要注意的是,authentication_string显示的是加密后的密码,和我原本输入的实际密码clover123是不一样der!

再看看权限方面

mysql> select user,select_priv,insert_priv,delete_priv,create_priv,drop_priv,reload_priv  from user;
+-----------+-------------+-------------+-------------+-------------+-----------+-------------+
| user      | select_priv | insert_priv | delete_priv | create_priv | drop_priv | reload_priv |
+-----------+-------------+-------------+-------------+-------------+-----------+-------------+
| root      | Y           | Y           | Y           | Y           | Y         | Y           |
| mysql.sys | N           | N           | N           | N           | N         | N           |
| clover    | Y           | Y           | Y           | Y           | Y         | N           |
+-----------+-------------+-------------+-------------+-------------+-----------+-------------+
3 rows in set (0.00 sec)

可以看到,由于我们对用户clover授予了select,insert,delete,create,drop权限,在对应的地方显示的是Y,而reload权限我们没授予,默认是N。

(责任编辑:IT)