Mysql
使用者 ‘root’@’%’ 的訪問被拒絕
我以前在 MySQL 中訪問 root 使用者就好了。但是最近,我已經不能了。
我可以正常登錄:
mysql -u root -p
這是登錄後的mysql狀態:
mysql> status -------------- mysql Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2 Connection id: 37 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 4 min 16 sec Threads: 1 Questions: 112 Slow queries: 0 Opens: 191 Flush tables: 1 Open tables: 6 Queries per second avg: 0.437 --------------
但是當我想做任何動作時,例如:
mysql> CREATE DATABASE moyennegenerale; ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'moyennegenerale'
我知道
%
用於表示任何主機,但我的狀態清楚地表明了 localhost。有人知道可能會發生什麼嗎?
我認為您有匿名使用者
嘗試執行這個:
SELECT user,host,password FROM mysql.user WHERE user='';
這將顯示存在哪些匿名使用者。最有可能的是,您會看到一行空白使用者、主機
%
和空白密碼,如下所示:mysql> select user,host,password from mysql.user; +-----------+-------------+-------------------------------------------+ | user | host | password | +-----------+-------------+-------------------------------------------+ | lwdba | 127.0.0.1 | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | lwdba | localhost | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | lwdba | % | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | root | localhost | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | root | 127.0.0.1 | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | vanilla | localhost | | | mywife | % | | | | % | | <<<--- LOOK !!! | replicant | 10.64.113.% | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | kumar | % | | +-----------+-------------+-------------------------------------------+
那麼,您是如何登錄的呢?執行此查詢:
SELECT USER(),CURRENT_USER();
這告訴你什麼?
- USER()報告您如何嘗試在 MySQL 中進行身份驗證
- CURRENT_USER()報告您是如何被允許在 MySQL 中進行身份驗證的
第二個函式
CURRENT_USER()
揭示瞭如何使用哪個匿名使用者登錄。您登錄時有哪些特權?
請執行
SHOW GRANTS;
這將揭示您在登錄時擁有的特權。您被阻止創建數據庫的事實表明您不是 root 使用者,而是某個較低特權的使用者。
請清理您的使用者授權。
Feb 17, 2012
: MySQL : 為什麼 mysql.db 中有“測試”條目?Feb 17, 2012
: mysql.db 表是做什麼用的?Jan 18, 2012
: MySQL 錯誤: 使用者 ‘a’@’localhost’ 的訪問被拒絕 (使用密碼: YES)至於重置root密碼,請執行以下操作:
echo "SET PASSWORD FOR root@localhost=PASSWORD('password');" > /var/lib/mysql/rootpwd.sql service mysql restart rm -f /var/lib/mysql/rootpwd.sql
試一試 !!!
我知道你做了什麼。
做這個:
SELECT `User`, `Grant_priv` FROM `mysql`.`user` WHERE `User` = 'root';
您可能會注意到它為 Grant_priv 返回一個“N”。所以這樣做:
UPDATE `mysql`.`user` SET `Grant_priv` = 'Y' WHERE `User` = 'root'; FLUSH PRIVILEGES; SELECT `User`, `Grant_priv` FROM `mysql`.`user`;
還有瓦拉!希望有幫助。