我可以正常登录:
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。有人对可能发生的事情有想法吗?
#1 楼
我认为您有匿名用户尝试运行此命令:
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错误:用户'a'@'localhost'的访问被拒绝(使用密码:是)至于重置根密码,请以下:
echo "SET PASSWORD FOR root@localhost=PASSWORD('password');" > /var/lib/mysql/rootpwd.sql
service mysql restart
rm -f /var/lib/mysql/rootpwd.sql
我从@ShlomiNoach中学到了这种有效的方法。
#2 楼
我知道您做了什么。执行以下操作:
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`;
还有Walla!希望有帮助。
#3 楼
在以root
用户身份输入后,检查您的特权: mysql> show grants for 'root'@'localhost';
检查特权后,您可以尝试将所有特权授予另一个用户,或者可以尝试将特权授予其他用户。
root
用户再次拥有所有特权: mysql> grant all privileges on *.* to 'root'@'localhost';
如果
root
用户没有特权,则可以尝试恢复它们,因此:停止
mysqld
服务器以这种方式重新启动服务器
mysqld_safe --skip-grant-table
使用以下方法恢复
root
特权:评论
这是在显示授予“ root” @“ localhost”命令的权限后我得到的:错误1141(42000):在主机“ localhost”上没有为用户“ root”定义此类授予
– Jules Testard
2012-12-19 13:32
第二个命令的输出是什么?
– Atropo
2012-12-19 13:43
在Debian中,有一种“更好”的方法来执行此操作,而无需重新启动服务器。就像root一样,以debian-sys-maint @ localhost身份连接并在/etc/mysql/debian.cnf中使用密码。该用户在MySQL中具有ALL特权。好处是您不需要重新启动服务器。
–安德斯
16年2月11日在16:49
尝试这个。须藤mysql --defaults-file = / etc / mysql / debian.cnf
–安德斯
16年2月11日在16:59
#4 楼
还可以尝试使用root特权创建另一个帐户。
并删除root用户,然后以指定的特权重新创建。 br />
这可能会有所帮助:
http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html
C。 5.4.1.2-LINUX(使用创建查询的文件来创建文件,具有完全root特权的新用户)
C.5.4.1.1-Windows(使用创建查询的文件来创建文件,具有完全root用户的新用户权限)
查询:(创建root用户)
CREATE USER 'new_root'@'%' IDENTIFIED BY '***';
GRANT ALL PRIVILEGES ON *.* TO 'new_root'@'%' IDENTIFIED BY '***' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
MySQL手册创建用户:
http://dev.mysql .com / doc / refman / 5.5 / en / adding-users.html
#5 楼
检查您是否对information_schema
db运行了导入查询,因为我使用的是新的MysQL客户端,并且没有意识到该查询正在尝试在information_schema
db中创建表,所以我一度陷入困境(因为要使用新数据库在运行查询时创建的目录不存在,连接回退到服务器中的第一个数据库)。我在这里尝试了每个答案,但由于使用了root访问权限并且权限似乎正确,我却一无所获。
评论
同样,出于安全原因,您应该在创建新的dba之后始终删除root用户。.只需确保他们是GRANT ALL PRIVILEGES,然后最后使用GRANT OPTION ..,则该位很重要。
–凯文佛罗里达
2014年3月29日在6:51
结合关闭和重新打开连接(就我而言,是从HeidiSQL中获得),就成功了!
– xorinzor
18年8月2日在14:12