錯誤如下:1045 Access denied for user 'root'@'localhost' (using password:YES)
從策劃到設計制作,每一步都追求做到細膩,制作可持續(xù)發(fā)展的企業(yè)網站。為客戶提供成都做網站、成都網站設計、網站策劃、網頁設計、域名與空間、網絡空間、網絡營銷、VI設計、 網站改版、漏洞修補等服務。為客戶提供更好的一站式互聯網解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進步。
想起來有可是在navicat添加的root@'%'用戶,可能密碼和現在新版本5.7的加密不同了,導致密碼不對.
所以解決方法是更新用戶密碼.
注意5.7版本密碼保存的列是 authentication_string ,密碼要用函數password加密.
更新密碼的SQL是 update user set authentication_string=password('密碼') where user="root";
下面是Windows平臺下操作步驟:
配置文件my.ini ,在mysqld下面添加skip-grant-tables,意思是可以直接回車登錄,保存退出。重啟mySQL,然后運行cmd
輸入mysql -u root -p就可以不用密碼登錄了,出現password:的時候直接回車可以進入。
1.切換到mysql數據庫:use mysql;
2.給root用戶設置新密碼,
mysql update user set authentication_string=password('密碼') where user="root";
3.刷新數據庫mysql flush privileges;
4.再修改my.ini,把剛加入的"skip-grant-tables"這行刪除或者添加#注釋,保存退出再重啟mysql服務就可以了。
一些參考命令
#刪除之前配置 drop user 'root' @ '%' ;
#配置遠程登錄 CREATE USER 'root' @ '%' IDENTIFIED BY password( '你的密碼') ;
#授權 GRANT ALL ON *.* TO 'root' @ '%' ;
#更新權限 flush privileges;
#查看用戶,主機,加密方法 select user,host,plugin from user;
phpmyadmin登陸出現無法登錄MySQL是設置錯誤造成的,解決方法為:
1、首先打開運行命令窗口,可以通過按住windows鍵+R的組合鍵來實現,輸入cmd,然后按下回車鍵。
2、這樣就進入了doc的命令窗口。
3、切換到我們安裝mysql的盤符。
4、然后再切換到mysql的bin目錄。
5、輸入mysql -uroot -p。
6、提示輸入密碼。
7、輸入mysql密碼之后,然后按下回車鍵,出現welcome的字樣表示登陸成功。
以前也用過mysql數據庫(那時還是mysql3),可這樣的問題還是頭一次遇到。我想在開發(fā)過程中遇到這類問題的人一定不在少數,那么我們就從這次出現的問題出發(fā)來一起研究一下mysql數據庫的賬戶添加問題。先通過控制臺添加一個賬戶:mysql INSERT INTO user- VALUES('%','monty',PASSWORD('some_pass'),
- 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
- 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
- '','','','',0,0,0,0);
然后,建立php程序進行登錄 htmlbodyh1It works!/h1?php
$link = mysql_connect('localhost', 'monty', 'some_pass');
if (!$link) {
die('Could not connect: ' . mysql_error());}echo 'Connected successfully';
mysql_close($link);
/body/html但是,運行后的結果卻是:
原來,在mysql的這個版本中(已經很久沒有用mysql了,之前的版本沒有經過測試),如果使用insert命令來增加一個賬號的話,必須在添加后刷新一下特權表:mysql INSERT INTO user - VALUES('%','monty',PASSWORD('some_pass'),
- 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
- 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
- '','','','',0,0,0,0);
mysql FLUSH PRIVILEGES;
mysql GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' - IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' - IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql GRANT USAGE ON *.* TO 'dummy'@'localhost'; 前兩個帳戶名稱都是monty,而且都是擁有所有權限和密碼。但是兩者的區(qū)別在于,第一個帳戶(monty@localhost)只能通過本地登錄,而第二個賬戶(monty@%)可以通過任意主機登錄。值得注意的是,為了能夠使用monty帳戶在任何地方進行登錄,這兩個賬戶同時存在則是必要的。因為,如果沒有本地帳戶(monty@localhost),使用monty帳戶登錄時,mysql_install_db將優(yōu)先考慮創(chuàng)建一個本地的匿名帳戶。那么結果將是monty賬戶會被當作一個匿名帳戶來處理。原因則在于,匿名帳戶擁有一個比nonty@%賬戶更加具體的host字段值,從而在user表排序的時候會相對出現的更早。
上面這個表中的admin帳號則只擁有reload和process權限且沒有密碼,這些權限允許該帳戶執(zhí)行mysqladmin reload, mysqladmin refresh,mysqladmin processlist和mysqladmin flush-xxx系列命令,但是沒有權限進入任何數據庫。dummy帳號沒有密碼也沒有任何權限,它只被允許從本地(localhost)登錄mysql。GRANT命令允許使用USAGE來創(chuàng)建一個帳號卻不賦予任何權限。如果你的Mysql采用的是NO_AUTO_CREATE_USER模式,那么通過命令行模式建立一個沒有密碼的帳號將會失敗。為了解決這個問題,你可以使用IDENTIFIED BY來指定具體的密碼。
現象
一線的工程師反映了一個奇怪的現象,剛剛從 MySQL 官網上下載了一個 MySQL 5.7.31。安裝完成后,發(fā)現使用任何密碼都能登陸 MySQL,修改密碼也不管用,重新啟動 MySQL 也不能解決。
分析
懷疑使用了 --skip-grant-tables 使用 mysqld --print-defaults 檢查,沒有發(fā)現。
檢查登陸用戶,都是 root@localhost,說明和 proxy user 沒有關系。
使用 mysql --print-defaults 檢查客戶端是否設置默認的用戶和密碼,沒有發(fā)現。
發(fā)現一切都正常,再檢查 plugin 字段,發(fā)現只有 root 用戶是 auth_socket ,其它的用戶都是 mysql_native_password,問題可能就出在這兒。
問題解決
對 auth_socket 驗證插件不了解,感覺是這個插件不安全,使用下面的命令修改后,問題解決:
update user set plugin="mysql_native_password" where user='root';
auth_socket 驗證插件的使用場景
問題解決后,又仔細研究了一下 auth_socket 這個插件,發(fā)現這種驗證方式有以下特點:
首先,這種驗證方式不要求輸入密碼,即使輸入了密碼也不驗證。這個特點讓很多人覺得很不安全,實際仔細研究一下這種方式,發(fā)現還是相當安全的,因為它有另外兩個限制;
只能用 UNIX 的 socket 方式登陸,這就保證了只能本地登陸,用戶在使用這種登陸方式時已經通過了操作系統的安全驗證;
操作系統的用戶和 MySQL 數據庫的用戶名必須一致,例如你要登陸 MySQL 的 root 用戶,必須用操作系統的 root 用戶登陸。
auth_socket 這個插件因為有這些特點,它很適合我們在系統投產前進行安裝調試的時候使用,而且也有相當的安全性,因為系統投產前通常經常同時使用操作系統的 root 用戶和 MySQL 的 root 用戶。當我們在系統投產后,操作系統的 root 用戶和 MySQL 的 root 用戶就不能隨便使用了,這時可以換成其它的驗證方式,可以使用下面的命令進行切換:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
第一步:先停止所有mysql
進程#
killall
-term
mysqld
第二步:用安全模式啟動
#
/usr/local/mysql/bin/mysqld_safe
--skip-grant-table
注:
啟動時會報錯,而且卡在哪不動,這時你只要回車即可,然后再用空密碼就能登陸了
第三:
用空密碼登陸,修改mysql
的root
密碼
#
mysql
-uroot
-p
//登錄mysql
mysql
use
mysql
//
選擇mysql
數據庫
mysql
update
user
set
password=password("654123")
where
user="root";
//
更新root
密碼
mysql
flush
privileges;
//
使修改立即生效
第四:
用你修改的密碼登陸!
1、首先在登錄前需要在配置文件中進行設置,找到配置文件。
2、打開配置文件,在配置文件的最尾端加上skip-grant-tables用來跳轉密碼驗證,然后保存文件。
3、接著修改完成后,需要重啟mysql服務,如下圖。
4、重啟完成后再重新登錄mysql服務器。
5、最后登錄成功后看到操作窗口就能正常操作了。