mysql的密碼放在user權(quán)限表的authentication_string字段中。user表是MySQL中最重要的一個(gè)權(quán)限表,用來(lái)記錄允許連接到服務(wù)器的賬號(hào)信息;修改用戶密碼時(shí),實(shí)際就是修改user表中authentication_string字段的值,語(yǔ)法為“SET PASSWORD FOR 'username'@'hostname'=PASSWORD ('新密碼')”。
本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。
mysql的密碼放在user權(quán)限表的authentication_string字段中。
MySQL user權(quán)限表的用戶列
MySQL 在安裝時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè)名為 mysql 的數(shù)據(jù)庫(kù),mysql 數(shù)據(jù)庫(kù)中存儲(chǔ)的都是用戶權(quán)限表。用戶登錄以后,MySQL 會(huì)根據(jù)這些權(quán)限表的內(nèi)容為每個(gè)用戶賦予相應(yīng)的權(quán)限。
user 表是 MySQL 中最重要的一個(gè)權(quán)限表,用來(lái)記錄允許連接到服務(wù)器的賬號(hào)信息。需要注意的是,在 user 表里啟用的所有權(quán)限都是全局級(jí)的,適用于所有數(shù)據(jù)庫(kù)。
user 表中的字段大致可以分為 4 類,分別是用戶列、權(quán)限列、安全列和資源控制列。
其中用戶列存儲(chǔ)了用戶連接 MySQL 數(shù)據(jù)庫(kù)時(shí)需要輸入的信息。
需要注意的是 MySQL 5.7 版本不再使用 Password 來(lái)作為密碼的字段,而改成了 authentication_string。
MySQL 用戶列如表 1 所示。
字段名 | 字段類型 | 是否為空 | 默認(rèn)值 | 說(shuō)明 |
---|---|---|---|---|
Host | char(60) | NO | 無(wú) | 主機(jī)名 |
User | char(32) | NO | 無(wú) | 用戶名 |
authentication_string | text | YES | 無(wú) | 密碼 |
用戶登錄時(shí),如果這 3 個(gè)字段同時(shí)匹配,MySQL 數(shù)據(jù)庫(kù)系統(tǒng)才會(huì)允許其登錄。創(chuàng)建新用戶時(shí),也是設(shè)置這 3 個(gè)字段的值。修改用戶密碼時(shí),實(shí)際就是修改 user 表的 authentication_string 字段的值。因此,這 3 個(gè)字段決定了用戶能否登錄。
使用SET語(yǔ)句修改普通用戶的密碼
在 MySQL 中,只有 root 用戶可以通過(guò)更新 MySQL 數(shù)據(jù)庫(kù)來(lái)更改密碼。使用 root 用戶登錄到 MySQL 服務(wù)器后,可以使用 SET 語(yǔ)句來(lái)修改普通用戶密碼。語(yǔ)法格式如下:
SET PASSWORD FOR 'username'@'hostname' = PASSWORD ('newpwd');
其中,username 參數(shù)是普通用戶的用戶名,hostname 參數(shù)是普通用戶的主機(jī)名,newpwd 是要更改的新密碼。
注意:新密碼必須使用 PASSWORD() 函數(shù)來(lái)加密,如果不使用 PASSWORD() 加密,也會(huì)執(zhí)行成功,但是用戶會(huì)無(wú)法登錄。
如果是普通用戶修改密碼,可省略 FOR 子句來(lái)更改自己的密碼。語(yǔ)法格式如下:
SET PASSWORD = PASSWORD('newpwd');
示例 1
首先創(chuàng)建一個(gè)沒(méi)有密碼的 testuser 用戶,SQL 語(yǔ)句和運(yùn)行結(jié)果如下:
mysql> CREATE USER 'testuser'@'localhost'; Query OK, 0 rows affected (0.14 sec)
root 用戶登錄 MySQL 服務(wù)器后,再使用 SET 語(yǔ)句將 testuser 用戶的密碼修改為“newpwd”,SQL 語(yǔ)句和運(yùn)行結(jié)果如下:
mysql> SET PASSWORD FOR 'testuser'@'localhost' = PASSWORD("newpwd"); Query OK, 0 rows affected, 1 warning (0.01 sec)
由運(yùn)行結(jié)果可以看出,SET 語(yǔ)句執(zhí)行成功,testuser 用戶的密碼被成功設(shè)置為“newpwd”。
下面驗(yàn)證 testuser 用戶密碼是否修改成功。退出 MySQL 服務(wù)器,使用 testuser 用戶登錄,輸入密碼“newpwd”,SQL 語(yǔ)句和運(yùn)行結(jié)果如下:
C:Usersleovo>mysql -utestuser -p Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 15 Server version: 5.7.29-log MySQL Community Server (GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
由運(yùn)行結(jié)果可以看出,testuser 用戶登錄成功,修改密碼成功。
示例 2
使用 testuser 用戶登錄 MySQL 服務(wù)器,再使用 SET 語(yǔ)句將密碼更改為“newpwd1”,SQL 語(yǔ)句和運(yùn)行結(jié)果如下所示:
mysql> SET PASSWORD = PASSWORD('newpwd1'); Query OK, 0 rows affected, 1 warning (0.00 sec)
由運(yùn)行結(jié)果可以看出,修改密碼成功。
【