无法使用mysql中创建的用户登录


76

使用此命令

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password';

我尝试登录:

 mysql -u brian -ppassword

错误是:

ERROR 1045 (28000): Access denied for user 'brian'@'localhost' (using password: YES)

我以root用户身份执行此操作,并且确实尝试刷新特权。

我尝试了无数用户,但它似乎无法正常工作。我可以创建没有密码的用户,并且登录有效。命令行和从phpmyadmin

还要检查用户是否在mysql.user中。

布赖恩表演的表演赠款:

| GRANT ALL PRIVILEGES ON *.* TO 'brian'@'%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |

嗯...向brian@展示什么%?返回?
Powerlord

Answers:


186

您可能会遇到这种永久性的MySQL问题,其中user表中的默认用户之一是'' @ localhost,这localhost最终会在表的后面拒绝所有用户。我会做的是mysqldumpmysql在此项目数据库并查看User表; 如果找到,请删除它并刷新特权。

有关更多详细信息,请参见https://dev.mysql.com/doc/refman/5.5/zh-CN/connection-access.html

常见的误解是认为,对于给定的用户名,当服务器尝试查找连接的匹配项时,首先使用显式命名该用户的所有行。这不是真的。前面的示例对此进行了说明,其中jeffrey与h1.example.net的连接首先不匹配包含“ jeffrey”作为“用户”列值的行,而是不匹配用户名的行。结果,即使jeffrey在连接时指定了用户名,其身份也会被认证为匿名用户。


1
我确实有。有没有更好的方法而不影响我的生产。
Brian G

好吧,我想,如果您不想摆脱它,可以将新创建​​的条目移到它前面。但是只要它在那里,它将继续对新用户这样做。如果您担心要摆脱它,则可能应该仔细阅读MySQL文档以了解其存在的原因,我敢肯定有一些奇怪的原因,但我现在不记得了。
混沌

关于此的更多信息。我几乎肯定这是我的问题。但我找不到任何更多信息。
布赖恩·G

dev.mysql.com/doc/refman/5.1/en/default-privileges.html具有一些有关“匿名帐户”的信息,该名称显然是空用户帐户。似乎没有任何迹象表明删除它们有任何弊端。
混沌

4
如果您在类似Debian的系统上使用mysql,则解决此问题的最佳方法是执行mysql_secure_installation(需要root特权)。
BigBlast

46

这是由匿名用户引起的问题。安装MySQL之后,我将始终运行

shell> mysql_secure_installation 

并选择设置/更改root密码,删除匿名用户,禁止远程root登录,删除测试数据库。这将删除匿名用户并保护您的安装。它还应该解决您遇到的问题。


如果觉得这确实是正确的答案,至少对于完整的演示数据库以外的任何其他问题而言。从某种意义上说,通过在执行此操作之前阻止用户登录(并删除匿名用户),似乎mysql是明智的,因为这是一个很大的警告,表明安装不安全。
Phil

22
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

1
这也对我有用,但是您能解释一下逻辑吗?
blackirishman,2015年

2
@blackirishman特权更改直到您刷新旧权限并且恢复了新权限后才生效。我确定这将在phpmyadmin上自动完成。这也对我有用!谢谢。
logicbloke

17

此处提供的解决方案均无效。经过大量的错误和尝试后,我意识到密码中包含特殊字符。更改密码而不使用特殊字符解决了该问题


我不必删除特殊字符,只需要使用-p选项来提示我输入密码即可。
ccjjmartin

1
这是给我的。我认为问题在于,当我设置密码时,其中的'\'字符并未得到字面解释,但是当我尝试以新用户身份登录时,它却被正确解释了。
jfla

以下任何/所有/某些字符是罪魁祸首&?^ \
AnkitK '18

1
我找出空格,应避免使用以下字符“'$,[] *?{}〜#%\ <> | ^;
Mehdi Nellen

我花了很长时间才意识到这一点。我使用了一个在线随机密码生成器来提供包含这些特殊字符之一的密码。
BadHorsie

5

mysql文档有这样的说法:(来自http://dev.mysql.com/doc/refman/5.1/en/adding-users.html):

其中两个帐户的用户名为,monty密码为some_pass。这两个帐户都是具有完全权限执行任何操作的超级用户帐户。'monty'@'localhost'仅当从本地主机连接时才能使用该帐户。该'monty'@'%'帐户将'%'通配符用于主机部分,因此可用于从任何主机进行连接。

必须同时拥有两个帐户,monty才能从任意位置进行连接monty。如果没有localhost帐户,则mysql_install_db当monty从本地主机连接时,由localhost创建的匿名用户帐户将具有优先权。结果,monty将被视为匿名用户。原因是匿名用户帐户Host比该'monty'@'%'帐户具有更具体的列值,因此在用户表排序顺序中排在较早的位置。

考虑到这一点,我建议您创建一个'brian'@'localhost'具有相同特权的用户。


1
<sarcasm>多么美好的设计决定!</
sarcasm

2

您在赠款声明中忘记了brian的引号。像这样尝试:

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password';


2

我认为“罗素·席尔瓦”是对的...

我创建了一个用户

CREATE USER 'username'@'%' PASSWORD='userpassword';

但是我无法登录该帐户。控制台告诉我

ERROR 1045 (28000): Access denied for user 'username'@'localhost' (using password: YES)

因此,我创建了一个具有相同用户名的用户,只是将“%”更改为“ localhost”,最终我可以以“用户名”身份登录。但是对我来说这很奇怪。


1

就我而言,这是由于我单击“ SSL:需要SSL”(在phpmyadmin中)。当我将其更改为“ REQUIRE NONE”时,我可以登录。


这使用phpmyadmin 4.5.4.1deb2ubuntu2为我修复了它。干杯! 我以前知道的phpmyadmin版本从来没有这个问题。
为10us

1

使用以下命令更改为本地密码:

ALTER USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'password';

0

您还可以从其他主机进行连接,然后绕过localhost匿名用户,然后可以删除它并清除特权:

mysql -u brian -ppassword -h 'other_host_than_localhost'

0

升级到17.04后,尝试连接到在Ubuntu上运行的Maria DB时遇到类似的问题。

默认设置是仅侦听localhost 127.0.0.1。

为了使MySQL / Maria在所有可用的端口和接口上进行侦听,我需要明确指定bind-address = 0.0.0.0。我将这一行添加到文件的末尾/etc/mysql/my.cnf,即

...
[client-server]

# Import all .cnf files from configuration directory

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
bind-address=0.0.0.0

然后...

sudo /etc/init.d/mysql restart 

-1

即使在确认我没有输入错误密码后,我也无法登录,对我来说,发生了类似的问题。以下两个步骤解决了我的问题。

  1. 删除测试数据库
  2. 删除匿名用户

Dropping test database您可能已经烧光了整个PC,我觉得它也可以解决问题……
Sebas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.