MySQL ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (使用密码: YES)

Posted

技术标签:

【中文标题】MySQL ERROR 1045 (28000): Access denied for user \'bill\'@\'localhost\' (使用密码: YES)【英文标题】:MySQL ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)MySQL ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (使用密码: YES) 【发布时间】:2021-08-26 16:18:54 【问题描述】:

首先让我提一下,我已经处理了许多建议的问题,但没有找到相关的答案。这就是我正在做的事情。

我已连接到我的 Amazon EC2 实例。我可以使用以下命令使用 mysql root 登录:

mysql -u root -p

然后我用主机 % 创建了一个新的用户账单

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

授予用户账单所有权限:

grant all privileges on *.* to 'bill'@'%' with grant option;

然后我退出 root 用户并尝试使用 bill 登录:

mysql -u bill -p

输入了正确的密码并得到这个错误:

错误 1045 (28000):拒绝用户 'bill'@'localhost' 访问(使用密码:YES)

【问题讨论】:

FLUSH PRIVILEGES了吗? 好的,我试过了,没有成功。请有其他建议。 你运行的是什么版本的服务器?我已经看到 5.1 在这方面表现得很奇怪。 这发生在我安装 Magento 时,我犯了一个更愚蠢的错误。输入“mysql -u magento -p magento”提示我输入密码,而不是默认密码,我输入的是 root 密码。 @authentictech 不幸的是,在发布此问题时,没有一个建议的解决方案对我有用。请参阅我自己的回答,帮助我摆脱这种情况。这就是我没有将其中任何一个标记为答案的原因。也许我可以将排名最高的回复标记为答案。 【参考方案1】:

所以对我来说,问题与我正在映射的端口有关。

3306 => 3306 不起作用(因为我有一个本地 mysql 正在运行)

3307 => 3306 有效!

这是在建立ssh隧道的上下文中:

ssh -N -L 3307:rdsDns:3306 ec2User@ec2Dns -i key.pem -v

3307是本地端口,3306是远程端口。

【讨论】:

【参考方案2】:

对我来说,进入mysql时没有指定-p参数。

mysql -p

我没有问题,但是没有密码调用mysql是错误的。

【讨论】:

【参考方案3】:

对我来说,root 有一个默认密码

我使用ALTER USER 'root'@'localhost' IDENTIFIED BY 'new Password'; 更改了密码,并且成功了

【讨论】:

我收到一个错误ERROR 1396 (HY000): Operation ALTER USER failed for 'user'@'localhost' ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)【参考方案4】:

现在!解决方案:

MySQL ERROR 1045 (28000): Access denied for user 'user'@'localhost' (使用密码:YES);

Wampserver 3.2.0 新安装或升级

可能xamp 使用mariaDB 作为默认值。

Wamp服务器自带mariaDB和mysql,默认安装mariaDB在3306端口,mysql在3307,有时是3308端口。

连接到mysql

在安装时它要求使用mariaDBMySql,但mariaDB 被选中为默认值,您无法更改它,请检查mysql 选项并安装。

安装完成后,mariaDB 在默认端口 3306 上运行,mysql 在另一个端口 3307 或 3308 上运行。

右键单击wampserver 图标,其运行应位于右下角,转到工具并查看正确的mysql 运行端口。

并将其包含在与以下相同的数据库连接中:

$host = 'localhost';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$port = '3308';//Port

$dsn = "mysql:host=$host;dbname=$db;port=$port;charset=$charset"; //Add in connection
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try 
     $pdo = new PDO($dsn, $user, $pass, $options);
 catch (\PDOException $e) 
     throw new \PDOException($e->getMessage(), (int)$e->getCode());

Note :我正在使用pdo。

更多信息请看这里:https://sourceforge.net/projects/wampserver/

【讨论】:

请不要使用反引号来强调。它们应该只用于代码。 MySQL 或 Wampserver 之类的词不是代码。 Right Click wampmanager->Tools->Invert Default DBMS 将允许您将 MySQL 或 mariaDB 设为默认值(使用端口 3306 的那个)这样您就不必在您的代码中添加在实时移动时不起作用的内容。 【参考方案5】:

如果您的 dbname、用户名、密码等字符串长度超过 https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html#grant-tables-scope-column-properties 中列出的值,您也可能无法登录,就像我的情况一样。

【讨论】:

【参考方案6】:

操作系统:windows

我的错误信息是:

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

我的原因是我没有用管理员权限打开cmd。

所以我的解决方案是以管理员身份打开cmd,然后就可以了。

【讨论】:

这只与windows有关。【参考方案7】:

如果 MySQL 在不区分大小写的操作系统(例如 Windows)上运行,也可能发生这种情况。

例如我发现尝试使用这些凭据连接到数据库失败:

mysql> grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';

$ mysql -specialuser' -p's3curepa5wrd' -h10.61.130.89 databaseV105

错误 1045 (28000):拒绝用户 'specialuser'@'10.0.1.113' 的访问(使用密码:YES)

但是,这成功了:

mysql> grant select on databasev105.* to 'specialuser' identified by 's3curepa5wrd';

$ mysql -specialuser' -h10.300.300.400 databaseV105 -p

输入密码:

【讨论】:

【参考方案8】:

更新:在 v8.0.15(可能是这个版本)上,PASSWORD() 功能不起作用。

你必须:

    确保首先停止 MySQL。 在安全模式下运行服务器并绕过特权:sudo mysqld_safe --skip-grant-tables 登录:mysql -u root mysql>UPDATE mysql.user SET authentication_string=null WHERE User='root'; mysql>FLUSH PRIVILEGES; mysql> exit; 再次登录:mysql -u root mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';

【讨论】:

【参考方案9】:

在 Windows 上,解决方法如下:

ERROR 1045 (28000): 用户 'root'@'localhost' 的访问被拒绝(使用密码:否)

    从控制面板卸载mysql 从C:\Program Files,C:\Program Files (x86)C:\ProgramData 中删除MySql 文件夹 安装mysql

【讨论】:

尝试了所有其他答案,终于决定尝试一下,它成功了!【参考方案10】:

这可能适用于极少数人,但在这里。不要在密码中使用感叹号!

我在使用 MariaDB 时遇到了上述错误。当我将它简化为数字和字母时,它起作用了。 @$ 等其他字符可以正常工作 - 我在同一实例的不同用户中使用了这些字符。

address 的第五个回复引导我解决问题。

【讨论】:

是的,这是真的,我的密码是数字、字母和这些字符 -::)(&/&\)/ 的混合体,猜猜看,是反斜杠导致了我的问题!【参考方案11】:

我有一个类似的问题 - 在我第一次尝试进入 MySQL 时,root,它告诉我访问被拒绝。原来我忘了使用sudo...

所以,如果您在root 第一次尝试失败,请尝试:

sudo mysql -u root -p

然后输入您的密码,这应该可以。

【讨论】:

【参考方案12】:

我遇到了类似的问题,因为我的密码包含“;” char 在我第一次创建密码时破坏了我的密码。如果对您有帮助,请谨慎行事。

【讨论】:

与@Chiwda 问题相同!有时它只是密码本身【参考方案13】:

我发现了另一种表面上看起来是边缘情况的情况;我可以以 root 身份通过 SELECT INTO .. OUTFILE 导出到文件系统,但不能以普通用户身份导出。虽然这可能是权限问题,但我已经看过了,并没有看到特别明显的东西。我只能说,以对相关数据库拥有所有权限的普通用户身份执行查询会返回导致我进入该主题的拒绝访问错误。当我在一个旧项目中找到成功使用 SELECT INTO ... OUTFILE 的记录时,我注意到我是以 root 身份登录的。果然,当我以 root 身份登录时,查询按预期运行。

【讨论】:

【参考方案14】:

我遇到了同样的错误。无效的设置如下:

define("HOSTNAME", "localhost");
define("HOSTUSER", "van");
define("HOSTPASS", "helsing");
define("DBNAME", "crossbow");
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

下面的编辑设置是让它工作的设置。注意到区别了吗?

define('HOSTNAME', 'localhost');
define('HOSTUSER', 'van');
define('HOSTPASS', 'helsing');
define('DBNAME', 'crossbow');
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

区别在于双引号。与 Java 相比,它们在 php 中似乎非常重要,并且它们在转义字符、设置 URL 以及现在将参数传递给函数方面都有影响。它们更漂亮(我知道),但总是尽可能多地使用单引号,然后可以在必要时将双引号嵌套在其中。

当我在 Linux 机器上而不是在 Windows 环境上测试我的应用程序时,出现了这个错误。

【讨论】:

【参考方案15】:

我希望你还没有因为删除 mysql 中的 debian-sys-maint 用户而造成更大的损失

让您的 mysql 守护程序以正常方式运行。如下图所示启动你的mysql客户端

mysql -u debian-sys-maint -p

在另一个终端中,cat 文件 /etc/mysql/debian.cnf。该文件包含密码;在提示输入密码时粘贴该密码。

http://ubuntuforums.org/showthread.php?t=1836919

【讨论】:

【参考方案16】:

对于 Mac 用户,如果他们仍然有问题(就像我的情况),我发现这个解决方案对我有用:MySQL command line '-bash command not found'

要在 macbook 终端上使用命令,即mysql,您需要使用以下命令导出路径:

export PATH=$PATH:/usr/local/mysql/bin/

考虑默认安装,使用以下命令以root用户获取mysql提示:

mysql -u root

否则你使用了错误的root密码。

参考:在 OSX 上设置 MySQL root 用户密码

【讨论】:

【参考方案17】:

如果您忘记密码或想修改密码。您可以按照以下步骤操作:

1 : 停止你的 mysql

[root@maomao ~]# service mysqld stop 停止 MySQL:[确定]

2 :使用“--skip-grant-tables”重启mysql

[root@mcy400 ~]# mysqld_safe --skip-grant-tables [root@cy400 ~]# 使用 /var/lib/mysql 中的数据库启动 mysqld 守护进程

3:打开一个新窗口并输入mysql -u root

[root@cy400 ~]# mysql -u root 欢迎使用 MySQL 监视器。命令以 ; 结尾或 \g。

4 : 更改用户数据库

mysql>使用mysql 读取表信息以补全表名和列名 您可以使用 -A 关闭此功能以获得更快的启动 数据库已更改

5:修改你的密码你的新密码应该在“()”中输入

mysql> 更新用户设置密码=password('root123') where user='root'; 查询正常,3 行受影响(0.00 秒) 匹配行:3 更改:3 警告:0

6:冲洗

mysql> 刷新权限;

7:退出

mysql> 退出 再见

8:重启mysql

[root@cy400 ~]# service mysqld restart; 停止 MySQL:[确定] 启动 MySQL:[确定]

Bingo!您可以使用您的用户名和新密码连接您的数据库:

[root@cy400 ~]# mysql -u root -p <br>
Enter password: admin123 <br>
Welcome to the MySQL monitor.  Commands end with ; or \g. <br>
Your MySQL connection id is 2 <br>
Server version: 5.0.77 Source distribution <br>
Type 'help;' or '\h' for help. Type '\c' to clear the buffer. <br>
mysql> quit <br>
Bye

【讨论】:

这对我有帮助,但在 Mac 上,如果您使用自制软件安装,则它是 mysql.server stop。就我而言,我无法更新用户列,因为没有;也无法创建一个,因为它处于安全模式。对于我现在正在做的事情,我不在乎,但我非常感谢这种格式的答案,其中显示了准确的输入和输出。谢谢! 对不起,我之前没用过mac,所以帮不了你。 谢谢你,这对我非常有用,你拯救了我的日日夜夜:)【参考方案18】:

调试总结

检查拼写错误:用户名或密码。 检查主机名并将其与 mysql.user 表主机名进行比较。 检查用户是否存在。 检查主机是否包含IP地址或主机名。

您很有可能在工作中多次遇到此问题。由于输入错误的用户名或密码,我经常遇到此问题。尽管这是原因之一,但您还有其他很多机会可能会遇到此问题。有时,它看起来非常相似,但是当您深入挖掘时,您会意识到导致此错误的多种因素。这篇文章将详细解释大多数常见原因以及解决此问题的解决方法。

可能的原因:

案例 1:输入错误:用户名或密码。

这是此错误的最常见原因。如果您输入的用户名或密码错误,您肯定会收到此错误。

解决方案:

此类错误的解决方案非常简单。只需输入正确的用户名和密码。此错误将得到解决。如果您忘记了密码,您可以重置用户名/密码。 如果您忘记了 admin / root 帐户的密码,有很多方法可以重置 / 重新获取 root 密码。如果您忘记了root密码,我将发布另一篇关于如何重置root密码的帖子。

案例 2:从错误的主机访问。

MySQL 为用户访问提供基于主机的限制作为安全功能。在我们的生产环境中,我们曾经将访问请求限制在应用程序服务器上。这个功能在很多生产场景中都非常有用。

解决方案:

当您遇到此类问题时,首先通过检查 mysql.user 表来检查您的主机是否被允许。 如果未定义,您可以更新或插入新记录到 mysql.user 表。 通常,出于安全考虑,从远程计算机以 root 用户身份访问是禁用的,这不是最佳实践。 如果您需要从多台机器访问您的服务器,请仅授予对这些机器的访问权限。最好不要使用通配符 (%) 并提供通用访问。 让我更新 mysql.user 表,现在演示用户可以从任何主机访问 MySQL 服务器。

案例3:服务器上不存在用户。

当您尝试访问的用户在 MySQL 服务器上不存在时,会发生此类错误。

解决方案:

当您遇到此类问题时,只需检查用户是否存在于 mysql.user 表中。如果记录不存在,用户将无法访问。如果该用户需要访问,请使用该用户名创建一个新用户。

案例 4:基于数字和名称的主机的混合。

要点

不建议在定义用户主机时使用通配符,尽量使用准确的主机名。

禁用远程机器的root登录。

使用代理用户概念。

与该主题相关的其他概念很少,而深入了解这些主题的细节与本文的范围非常不同。我们将在接下来的文章中研究以下相关主题。

如果您忘记了 MySQL 服务器的 root 密码该怎么办。 MySQL 访问权限问题和用户相关表。 具有最佳实践的 MySQL 安全功能。

我希望这篇文章能帮助您解决 MySQL 错误代码 1045 用户在 MySQL 中的访问被拒绝。

【讨论】:

【参考方案19】:

迟到了

我尝试了所有这些其他答案并运行了许多不同版本的mysql -u root -p,但从未运行过


mysql -u root -p

只需按[ENTER] 输入密码。


一旦我这样做了,它就起作用了。希望这可以帮助某人。

【讨论】:

【参考方案20】:

对我来说,这个问题是由 MySQL 5.7.2 的一个新特性引起的:user 条目如果plugin 字段为空,则忽略

将其设置为例如mysql_native_password 重新启用它们:

UPDATE user SET plugin='mysql_native_password' WHERE user='foo';
FLUSH PRIVILEGES;

请参阅“身份验证说明”下的the release notes for MySQL 5.7.2。

由于某种原因(可能是因为我的 4.1 之前的密码哈希被删除了),mysql_upgrade 脚本没有设置默认插件值。

我注意到/var/log/mysql/error.log 中的以下警告消息后发现:

[警告] 用户条目 'foo'@'%' 的插件值为空。该用户将被忽略,任何人都无法再使用该用户登录。

我在这里发布这个答案可能是为了避免有人像我一样使用同样荒谬的时间。

【讨论】:

【参考方案21】:

百分号表示所有ip,所以本地主机是多余的......不需要本地主机的第二条记录。

实际上,'localhost' 在 mysql 中是特殊的,它表示通过 unix 套接字(或我相信是 Windows 上的命名管道)的连接,而不是 TCP/IP 套接字。使用 % 作为主机不包括 'localhost'

MySQL 用户帐户有两个组成部分:用户名和主机名。用户名标识用户,主机名指定用户可以连接的主机。将用户名和主机名组合起来创建一个用户帐户:

'&lt;user_name&gt;'@'&lt;host_name&gt;' 您可以为主机名指定特定的 IP 地址或地址范围,或使用百分比字符 ("%") 使该用户能够从任何主机登录。

请注意,用户帐户由用户名和主机名定义。例如,'root'@'%''root'@'localhost' 是不同的用户帐户。

【讨论】:

【参考方案22】:

您可能有一个匿名用户 ''@'localhost'''@'127.0.0.1'

根据the manual:

当可能有多个匹配时,服务器必须确定哪一个 他们使用。它解决了这个问题如下:(...)

当客户端尝试连接时,服务器会按排序顺序查看行[of table mysql.user]。 服务器使用与客户端主机名和用户名匹配的第一行。

(...) 服务器使用排序规则将具有最具体的主机值优先的行排序。 文字主机名[例如'localhost']和IP地址是最具体的。

因此,当从 localhost 连接时,这样的匿名用户会“屏蔽”任何其他用户,例如 '[any_username]'@'%'

'bill'@'localhost' 确实匹配 'bill'@'%',但会事先匹配(例如)''@'localhost'

推荐的解决方案是删除这个匿名用户(这通常是一件好事)。


以下编辑大多与主要问题无关。这些只是为了回答这个线程中其他 cmet 提出的一些问题。

编辑 1

通过套接字验证为'bill'@'%'

root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock 欢迎使用 MySQL 监视器 (...) mysql> 选择用户,主机 FROM mysql.user; +--------+------------+ |用户 |主持人 | +--------+------------+ |账单 | % | |根 | 127.0.0.1 | |根 | ::1 | |根 |本地主机 | +--------+------------+ 4 行一组(0.00 秒) mysql> 选择用户(),当前用户(); +----------------+----------------+ |用户() |当前用户() | +----------------+----------------+ |账单@localhost |账单@% | +----------------+----------------+ 一组中的 1 行(0.02 秒) mysql> 显示变量,如“skip_networking”; +-----------------+--------+ |变量名 |价值 | +-----------------+--------+ |跳过网络 |开 | +-----------------+--------+ 一组中的 1 行(0.00 秒)

编辑 2

完全一样的设置,除了我重新激活了网络,我现在创建了一个匿名用户''@'localhost'

root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql 欢迎使用 MySQL 监视器 (...) mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass'; 查询正常,0 行受影响(0.00 秒) mysql>再见 root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ --socket=/tmp/mysql-5.5.sock 错误 1045 (28000):拒绝用户 'bill'@'localhost' 的访问(使用密码:是) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ -h127.0.0.1 --protocol=TCP 错误 1045 (28000):拒绝用户 'bill'@'localhost' 的访问(使用密码:是) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ -hlocalhost --protocol=TCP 错误 1045 (28000):拒绝用户 'bill'@'localhost' 的访问(使用密码:是)

编辑 3

与编辑 2 中的情况相同,现在提供匿名用户的密码。

root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost 欢迎使用 MySQL 监视器 (...) mysql> 选择用户(),当前用户(); +----------------+----------------+ |用户() |当前用户() | +----------------+----------------+ |账单@localhost | @本地主机 | +----------------+----------------+ 一组中的 1 行(0.01 秒)

结论 1,来自编辑 1:可以通过套接字验证为 'bill'@'%'

来自编辑 2 的结论 2:是通过 TCP 连接还是通过套接字连接对身份验证过程没有影响(显然,除了 'something'@'localhost' 之外的其他人不能通过套接字连接)。

结论 3,来自编辑 3:虽然我指定了 -ubill,但我已被授予匿名用户访问权限。这是因为上面建议的“排序规则”。请注意,在大多数默认安装中,a no-password, anonymous user exists(并且应该被保护/删除)。

【讨论】:

对于那些想知道为什么 'bill'@'localhost' 和我一样匹配 ''@'localhost' 的人来说,一个空字符串实际上是 MySQL 身份验证算法中的通配符。 @Sanja 使用此解决方法时要格外小心。您可能允许从任何位置匿名访问您的数据库。如有疑问,我宁愿删除用户。 @RandomSeed 感谢您的评论!可能我应该删除匿名用户。附:我发现dev.mysql.com/doc/refman/5.1/en/default-privileges.html 说这些用户肯定可以被删除:DROP USER ''@'localhost';。某些特殊目的不需要它们。 我很高兴找到这个。我的一天几乎被毁了!我花了几个小时来寻找错误,我发现这完全是由于一些愚蠢的''@'localhost'。我们生活,我们学习! 这就是答案!为什么这不是在每个 mysql 手册中都以粗体大写字母出现。删除匿名用户,否则将终止您从 LOCALHOST 登录的所有尝试!【参考方案23】:

当您的密码包含一些特殊字符(如@、$ 等)时也会发生这种情况。 为避免这种情况,您可以将密码用单引号括起来:

$ mysql -usomeuser -p's0mep@$$w0Rd'

或者在输入时不要使用密码。将其留空,然后在终端询问时键入。这是推荐的方式。

$ mysql -usomeuser -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 191
Server version: 5.5.46-0ubuntu0.14.04.2 (Ubuntu)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

【讨论】:

这确实是个问题(对我来说就是这样)。我所有帐户的所有密码都是使用pwgen 生成的。今天我为 MySQL 数据库及其用户生成了一个新的。不幸的是,密码包含一个反斜杠“\”,我没有将其识别为错误来源(我什至没有想到这一点)。所以,我搜索了几个小时的解决方案。在绝望中将密码设置为“123”后,登录终于成功了。 ... 用户应该注意,一些特殊字符可能会导致问题,因为 MySQL 不会在使用密码时显示任何警告,例如“daiy4ha4in7chooshuiphie\Th*aew”。 如果它还没有出现,我正准备把它作为答案发布,它在列表中太远了,我没注意到(所以我把它加了+1)跨度> 【参考方案24】:

不确定其他人是否会觉得这有帮助,但我遇到了同样的错误,并到处搜索任何匿名用户……但没有。问题最终是用户帐户设置为“需要 SSL” - 我在 PHPMyAdmin 中通过转到用户帐户并单击用户的编辑权限来找到它。一旦我取消选中此选项,一切都按预期工作!

【讨论】:

【参考方案25】:

两者之间的区别:

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';

检查一下:

mysql> select user,host from mysql.user;
+---------------+----------------------------+
| user          | host                       |
+---------------+----------------------------+
| bill          | %                          | <=== created by first
| root          | 127.0.0.1                  |
| root          | ::1                        |
| root          | localhost                  |
| bill          | localhost                  | <=== created by second
+---------------+----------------------------+

命令

mysql -u bill -p

隐式访问 'bill'@'localhost' 而不是 'bill'@'%'。

'bill'@'localhost' 没有权限

你得到错误:

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

解决问题:

CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';

grant all privileges on . to 'bill'@'localhost' with grant option;

【讨论】:

授权语句返回错误。我需要像这样指定一个数据库:将 newdb.* 上的所有权限授予 ....【参考方案26】:

解决办法是删除匿名(Any)用户!

我在其他人设置的服务器上也遇到了同样的问题。我通常不会在安装 MySQL 时选择创建匿名用户,所以没有注意到这一点。最初,我以“root”用户身份登录并创建了几个“普通”用户(也就是仅在 dbs 上具有权限的用户,其用户名作为前缀),然后注销,然后继续验证第一个普通用户。我无法登录。既不是通过phpMyAdmin,也不是通过shell。原来,罪魁祸首就是这个“Any”用户。

【讨论】:

【参考方案27】:

只是想让您知道一个不寻常的情况,我收到了同样的错误。也许这对将来的某人有所帮助。

我开发了一些基本视图,在开发站点创建并将它们转移到生产站点。那周晚些时候,我更改了一个 PHP 脚本,突然出现错误,即用户'local-web-user'@'localhost'的访问被拒绝。数据源对象没有改变,所以我专注于 MySQL 中的数据库用户,同时担心有人入侵了我的网站。幸运的是,该网站的其余部分似乎没有受到伤害。

后来证明,观点是罪魁祸首。我们的对象传输是使用另一个(和远程:admin@ip-address)用户而不是本地网站用户完成的。因此,视图是使用 'admin'@'ip-address' 作为定义者创建的。视图创建 SECURITY 默认为

SQL SECURITY DEFINER

当 local-web-user 尝试使用视图时,它偶然发现定义者缺乏使用表的权限。一旦安全性更改为:

SQL SECURITY INVOKER

问题已解决。根据错误消息,实际问题与预期完全不同。

【讨论】:

这最终也成为了我的问题的根源——缺少“定义器”的视图。找出这是否发生在您身上的一种快速方法是尝试以 root 身份查询同一个表或视图 - 如果这样做,错误消息将更改为更具描述性的“错误 1449 (HY000):用户指定为定义器不存在”。【参考方案28】:

让自己免于头疼...您的问题可能是您缺少密码周围的引号。至少那是我绕道了 3 个小时的情况。

[client]
user = myusername
password = "mypassword"   # <----------------------- VERY IMPORTANT (quotes)
host = localhost

http://dev.mysql.com/doc/refman/5.7/en/option-files.html

搜索“这是一个典型的用户选项文件:”并查看他们在其中陈述的示例。祝你好运,我希望能为别人节省一些时间。

【讨论】:

谢谢你。我在这上面浪费了半天的时间,而密码周围的愚蠢引号起到了作用! 哈哈。当它发生在我身上时,我几乎浪费了同样的东西。很高兴能帮上忙。 是的。这在 laravel .env 文件中也发生在我身上。没有报价,也没有工作。谢谢。 :)【参考方案29】:

我为自己找到的最佳解决方案是。

我的用户是声纳,每当我试图从外部或其他机器连接到我的数据库时,我都会收到错误

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

另外,当我在另一台机器上尝试这个并通过 Jenkins 作业时,我的访问 URL 是

alm-lt-test.xyz.com

如果你想远程连接,你可以用不同的方式指定它,如下所示:

mysql -u sonar -p -halm-lt-test.xyz.com
mysql -u sonar -p -h101.33.65.94
mysql -u sonar -p -h127.0.0.1 --protocol=TCP
mysql -u sonar -p -h172.27.59.54 --protocol=TCP

要使用 URL 访问它,您只需执行以下查询。

GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'alm-lt-test.xyz.com' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'172.27.59.54' IDENTIFIED BY 'sonar';

【讨论】:

【参考方案30】:

我遇到了同样的问题,但在我的情况下,解决方案是由 eggyal 的评论解决的。我也有一个匿名用户,但删除它并没有解决问题。 'FLUSH PRIVILEGES' 命令虽然有效。

对此令我惊讶的是,我使用 MySQL Workbench 创建了用户,并且我希望它能够执行所有必要的功能来完成任务。

【讨论】:

以上是关于MySQL ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (使用密码: YES)的主要内容,如果未能解决你的问题,请参考以下文章

mysql ERROR 1045 (28000): 错误解决办法

mysql ERROR 1045 (28000): 错误解决办法

mysql登录时,ERROR 1045 (28000): 错误解决办法

mysql ERROR 1045 (28000): 错误解决办法

MySQL ERROR 1045 (28000)

centos环境下登录mysql报 ERROR 1045 (28000)怎么解决