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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章