mysql使用者root多密碼成因

2021-08-13 19:21:03 字數 2053 閱讀 7719

今天,登陸某伺服器時,突然注意到乙個怪異的現象,mysql資料庫mysql.user表中root使用者居然有兩個密碼(見下圖),難道乙個賬號可以通過兩個密碼登陸?帶著這個疑問,翻閱了一些資料後,終於明白一些。

首先,了解下mysql使用者密碼加密的相關知識,mysql以4.1版本為分界線,之前使用mysql323加密,之後使用mysqlsha1加密。

mysql323加密:(16位),使用old_passwd()函式加密

mysqlsha1加密:(去掉*號40位),使用passwd()函式加密

然後,熟悉下常用的更改使用者密碼的命令

方法1: 用set password命令

首先登入mysql。

格式:mysql> set password for 使用者名稱@localhost = password('新密碼');

例子:mysql> set password for root@localhost = password('123');

方法2:用mysqladmin

格式:mysqladmin -u使用者名稱 -p舊密碼 password 新密碼

例子:mysqladmin -uroot -p123456 password 123

首先登入mysql。

mysql> use mysql;

mysql> update user set password=password('123') where user='root' and host='localhost';

mysql> flush privileges; 

實驗環境為mysql5,mysql資料庫root密碼初始為123456,更改為1234567後,出現了與文中開始相同的情景。 

我們對上述情況進行命令測試:

#mysql -uroot -h localhost -p123456             #不能登陸

#mysql -uroot -h 127.0.0.1 -p123456 #不能登陸

#mysql -uroot -h localhost -p1234567 #登陸成功

#mysql -uroot -h 127.0.0.1 -p1234567 #登陸成功

反之,當我們設定環境初始密碼為123456,隨後我們使用命令

mysql>set password [email protected]=password('1234567');
將下面的記錄password更改為1234567後,我們發現使用密碼1234567並不能成功登陸,而使用密碼123456可以登陸成功。

原因:

因為mysql在驗證使用者時,先對user表進行排序:

1、specified的host排在pattern的host前面。

2、相同host的條目,specified的user排在anonymous的前面。

3、其他按預設儲存順序。

排序結束後,從第一條開始匹配,如果匹配符合,則忽略剩下所有。

所以:

對於mysql而言user欄位中,localhost與127.0.0.1是完全等價的,當排序結束後,password欄位的值排在前面的,就是localhost與127.0.0.1的密碼密文,下面的密文自動忽略,可視為無效資料。因此,文中初始的描述的情況,密碼就是第一條password記錄的值。

MYSQL 修改root使用者密碼

當我們裝了mysql一段時間後發現root使用者密碼忘了,真蛋疼!這時候該怎麼辦!1.停止mysql服務 在my.ini 檔案中 mysqld 下面加上這樣一句 skip grant tables 表示服務再啟動的時候是跳過許可權驗證的。然後我們就不需要任何使用者名稱和密碼直接可以登入mysql了,...

Mysql重置root使用者密碼

1.開啟命令視窗cmd,輸入命令 net stop mysql,停止mysql服務 或者通過設定中的服務找到mysql服務直接停止 2.開啟跳過密碼驗證登入的mysql服務 輸入命令 mysqld console skip grant tables shared memory 如下圖 3.再開啟乙個...

MySQL忘記root使用者密碼

忘記root密碼 一 init file方式 推薦的方式 修改my.cnf,新增引數 mysqld init file tmp init.sql 建立init.sql,並編輯 可以直接將修改密碼的sql重定向到init.sql檔案中 echo alter user root localhost id...