問題描述
小白初學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。