這應(yīng)該是你的環(huán)境配置問題。
我們提供的服務(wù)有:網(wǎng)站設(shè)計、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、青川ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的青川網(wǎng)站制作公司
檢查一下你的php中mysql的擴(kuò)展是否開啟。
檢查你的mysql的相關(guān)dll是否放到windows/system中
解決辦法是重新設(shè)置root用戶密碼,在Windows平臺下操作步驟如下:
1、以系統(tǒng)管理員身份登錄到系統(tǒng);
2、如果MySQL服務(wù)器正在運(yùn)行,停止它。
如果是作為Windows服務(wù)運(yùn)行的服務(wù)器,進(jìn)入服務(wù)管理器:開始菜單-控制面板-管理工具-服務(wù)
如果服務(wù)器不是作為服務(wù)而運(yùn)行的,可能需要使用任務(wù)管理器來強(qiáng)制停止它。
3、創(chuàng)建1個文本文件,并將下述命令置于單一行中:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');
用任意名稱保存該文件。在本例中,該文件為C:\mysql-init.txt。
4、進(jìn)入DOS命令提示:開始菜單-運(yùn)行- cmd
假定你已將MySQL安裝到C:\mysql。如果你將MySQL安裝到了另一位置,請對下述命令進(jìn)行相應(yīng)的調(diào)整。
在DOS命令提示符下,執(zhí)行命令:
C:\ C:\mysql\bin\mysqld-nt --init-file=C:\mysql-init.txt
在服務(wù)器啟動時,執(zhí)行由“--init-file”選項(作用:在啟動時從指定的文件中讀取SQL命令)命名的文件的內(nèi)容,更改根用戶密碼。當(dāng)服務(wù)器成功啟動后,應(yīng)刪除C:\mysql-init.txt。
5、停止MySQL服務(wù)器,然后在正常模式下重啟它。如果以服務(wù)方式運(yùn)行服務(wù)器,應(yīng)從Windows服務(wù)窗口啟動它。如果以手動方式啟動了服務(wù)器,能夠像正常情形下一樣使用命令。
附:
其他方法
方法一:
# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking
# mysql -u root mysql
mysql UPDATE user SET Password=PASSWORD(’newpassword’) where USER=’root’;
mysql FLUSH PRIVILEGES;
mysql quit
# /etc/init.d/mysql restart
# mysql -uroot -p
Enter password: 輸入新設(shè)的密碼newpassword
mysql
方法二:
直接使用/etc/mysql/debian.cnf文件中[client]節(jié)提供的用戶名和密碼:
# mysql -udebian-sys-maint -p
Enter password: 輸入[client]節(jié)的密碼
mysql UPDATE user SET Password=PASSWORD(’newpassword’) where USER=’root’;
mysql FLUSH PRIVILEGES;
mysql quit
# mysql -uroot -p
Enter password: 輸入新設(shè)的密碼newpassword
mysql
另一個方法
Windows:
1. 管理員登陸系統(tǒng),停止mysql服務(wù)或者結(jié)束mysqld-nt進(jìn)程
2. 進(jìn)入命令行,來到mysql的安裝目錄.假設(shè)安裝目錄為 d:\mysql\ , CMD進(jìn)入命令行
3. 運(yùn)行 d:\mysql\bin\mysqld-nt --skip-grant-tables 啟動mysql,關(guān)閉權(quán)限的檢查
4. 運(yùn)行 d:\mysql\bin\mysqladmin -u root flush-privileges password "newpassword" 重設(shè)root密碼
5. 重新啟動mysql服務(wù)
①右鍵點擊C盤(其他盤符也行)?屬性?安全?編輯
②打開之后,在這里查看當(dāng)前的賬戶是否在其中?如在,點選編輯。
③選擇用戶或組→高級→選擇用戶或組→立即查找,找到后點選該用戶→確定
④返回→確定,這里是重點,一般默認(rèn)是沒有所有權(quán)限的,點擊允許中的完全控制→確定。
處理異常情況:
點選 高級→所有者→編輯
輸入ev→檢查名稱→添加權(quán)限即可。
權(quán)限管理,一般指根據(jù)系統(tǒng)設(shè)置的安全規(guī)則或者安全策略,用戶可以訪問而且只能訪問自己被授權(quán)的資源,不多不少。權(quán)限管理幾乎出現(xiàn)在任何系統(tǒng)里面,只要有用戶和密碼的系統(tǒng)。 很多人,常將“用戶身份認(rèn)證”、“密碼加密”、“系統(tǒng)管理”等概念與權(quán)限管理概念混淆。
從控制力度來看,可以將權(quán)限管理分為兩大類:
1,功能級權(quán)限管理;
2,數(shù)據(jù)級權(quán)限管理。
從控制方向來看,也可以將權(quán)限管理分為兩大類:
1,從系統(tǒng)獲取數(shù)據(jù),比如查詢訂單、查詢客戶資料;
2,向系統(tǒng)提交數(shù)據(jù),比如刪除訂單、修改客戶資料。
現(xiàn)象
一線的工程師反映了一個奇怪的現(xiàn)象,剛剛從 MySQL 官網(wǎng)上下載了一個 MySQL 5.7.31。安裝完成后,發(fā)現(xiàn)使用任何密碼都能登陸 MySQL,修改密碼也不管用,重新啟動 MySQL 也不能解決。
分析
懷疑使用了 --skip-grant-tables 使用 mysqld --print-defaults 檢查,沒有發(fā)現(xiàn)。
檢查登陸用戶,都是 root@localhost,說明和 proxy user 沒有關(guān)系。
使用 mysql --print-defaults 檢查客戶端是否設(shè)置默認(rèn)的用戶和密碼,沒有發(fā)現(xiàn)。
發(fā)現(xiàn)一切都正常,再檢查 plugin 字段,發(fā)現(xiàn)只有 root 用戶是 auth_socket ,其它的用戶都是 mysql_native_password,問題可能就出在這兒。
問題解決
對 auth_socket 驗證插件不了解,感覺是這個插件不安全,使用下面的命令修改后,問題解決:
update user set plugin="mysql_native_password" where user='root';
auth_socket 驗證插件的使用場景
問題解決后,又仔細(xì)研究了一下 auth_socket 這個插件,發(fā)現(xiàn)這種驗證方式有以下特點:
首先,這種驗證方式不要求輸入密碼,即使輸入了密碼也不驗證。這個特點讓很多人覺得很不安全,實際仔細(xì)研究一下這種方式,發(fā)現(xiàn)還是相當(dāng)安全的,因為它有另外兩個限制;
只能用 UNIX 的 socket 方式登陸,這就保證了只能本地登陸,用戶在使用這種登陸方式時已經(jīng)通過了操作系統(tǒng)的安全驗證;
操作系統(tǒng)的用戶和 MySQL 數(shù)據(jù)庫的用戶名必須一致,例如你要登陸 MySQL 的 root 用戶,必須用操作系統(tǒng)的 root 用戶登陸。
auth_socket 這個插件因為有這些特點,它很適合我們在系統(tǒng)投產(chǎn)前進(jìn)行安裝調(diào)試的時候使用,而且也有相當(dāng)?shù)陌踩?,因為系統(tǒng)投產(chǎn)前通常經(jīng)常同時使用操作系統(tǒng)的 root 用戶和 MySQL 的 root 用戶。當(dāng)我們在系統(tǒng)投產(chǎn)后,操作系統(tǒng)的 root 用戶和 MySQL 的 root 用戶就不能隨便使用了,這時可以換成其它的驗證方式,可以使用下面的命令進(jìn)行切換:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
select * from users where user_name=''or 1=1' and password='$password'
語句中多了個單引號,查詢語句錯了
mysql-8.0.13 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
一、修改root密碼
mysql?update mysql.user set authentication_string="123456" where user="root";
或:mysqlupdate mysql.user set authentication_string="123456" where user="root" and?host='localhost';
#刷新權(quán)限(必須步驟)
mysql flush privileges;
#查詢密碼是否生效:
mysql select host,user,authentication_string from mysql.user;
mysql-8.0.13修改密碼后mysqlquit? 再次登錄。
mysql - u root -p
password:123456?
報錯:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
找到一種解決方法:
1、cmd-1窗口:無密碼啟動mysql服務(wù)
mysqld --console --skip-grant-tables --shared-memory ;
#--skip-grant-tables 的意思是啟動MySQL服務(wù)的時候跳過權(quán)限表認(rèn)證。
2、無密碼登錄,再次修改密碼。
再開一個CMD窗口(前一個CMD窗口已經(jīng)不能動了),轉(zhuǎn)到mysql\bin目錄
mysql -u root -p
-密碼不輸入直接enter
#修改密碼為空
mysql UPDATE mysql.user SET authentication_string='' WHERE user='root';
mysqlflush privileges;? ??
myslqquit? ?
#再次登錄無密碼登錄
mysql - u root -p
Enter password:?
#enter不輸入密碼進(jìn)入mysql
------------------------------------------------------------------------------------
查詢網(wǎng)上資料,可能是MySQL8.0的caching_sha2_password問題,再來試試
MySQL8.0采用了新的更安全的驗證方式,原有修改密碼方法修改密碼后無法登錄
mysqlupdate mysql.user set authentication_string="123456" where user="root" and?host='localhost';
1、首先查詢用戶
mysql select host,user,plugin,authentication_string from mysql.user;
2、修改密碼和密碼方式
mysql ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
mysql flush privileges;
3、退出再次登錄,成功。
或者也可以修改密碼后再修改plugin
1、mysqlupdate mysql.user set authentication_string="123456" where user="root" and?host='localhost';
2、mysql UPDATE mysql.user SET plugin='mysql_native_password' WHERE user='root';
具體步驟:windows-mysql無法登錄,修改密碼
1、首先關(guān)閉正在運(yùn)行的MySQL服務(wù)。?
2、打開CMD窗口,轉(zhuǎn)到mysql\bin目錄。?
3.、輸入 mysqld --console --skip-grant-tables --shared-memory ;。--skip-grant-tables 的意思是啟動MySQL服務(wù)的時候跳過權(quán)限表認(rèn)證。
4、再開一個CMD窗口(前一個窗口已經(jīng)不能動了),轉(zhuǎn)到mysql\bin目錄。?
5. 輸入mysql -u root -p回車,出現(xiàn)MySQL提示符 。??
6. 進(jìn)行修改密碼:
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
# plugin需要改成: mysql_native_password
7. 刷新權(quán)限(必須步驟):flush privileges; 。?
8. 退出 quit。?
9. 再次訪問,使用用戶名root和新密碼123456登錄。?
#啟動mysql服務(wù)? ? net start mysql
#停止mysql服務(wù)? ? net stop mysql
#登錄mysql? ?mysql -u root? -p
#查詢用戶信息?
mysql select host,user,plugin,authentication_string from mysql.user;
#修改密碼:
mysql ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY it'123456';
#退出? mysqlquit