Py学习  »  DATABASE

mysqli_connect():(28000/1045):拒绝用户“xxx”@“xxx”(使用密码:是)[重复]

AleksAnderson IT • 4 年前 • 1781 次点击  

首先让我提一句,我已经考虑了许多建议的问题,但没有找到相关的答案。这就是我要做的。

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

mysql -u root -p

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

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

授予用户Bill所有权限:

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

然后我从根用户退出并尝试用比尔登录:

mysql -u bill -p

输入了正确的密码并出现此错误:

错误1045(28000):拒绝用户“bill”@“localhost”的访问(使用密码:yes)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47273
 
1781 次点击  
文章 [ 30 ]  |  最新文章 4 年前
Mahesh Patil
Reply   •   1 楼
Mahesh Patil    11 年前

MySQL帐户名由用户名和主机名组成,主机名中的名称“local host”表示本地主机。您还可以在主机名或IP地址值中使用通配符%和u。它们与使用like运算符执行的模式匹配操作具有相同的含义。例如,主机值“%”与任何主机名匹配,而值“%.mysql.com”与mysql.com域中的任何主机匹配。192.168.1.%'匹配192.168.1 C类网络中的任何主机。

以上只是介绍:

实际上两个用户 'bill'@'localhost' 'bill'@'%' 是不同的mysql帐户,因此两者都应该使用自己的身份验证详细信息,如密码。

有关详细信息,请参阅 http://dev.mysql.com/doc/refman//5.5/en/account-names.html

Genaut
Reply   •   2 楼
Genaut    4 年前

我有类似的问题,因为我的密码包含“;”字符打破我的密码时,我创建它在第一时间。如果可以的话,请小心。

Jaleel Nazir
Reply   •   3 楼
Jaleel Nazir    4 年前

更新:在V8.0.15(可能是这个版本)上,password()函数不起作用

你必须:

  1. 请确保已先停止mysql。
  2. 以安全模式运行服务器,并绕过权限: sudo mysqld_safe --skip-grant-tables
  3. 登录: mysql -u root
  4. MySQL> UPDATE mysql.user SET authentication_string=null WHERE User='root';
  5. FLUSH PRIVILEGES;
  6. MySQL> exit;

  7. 然后再次登录: mysql-u根

8个。MySQL> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';

快乐:)!

kguest
Reply   •   4 楼
kguest    4 年前

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

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

mysql>将databasev105.*上的select授予由“s3curepa5wrd”标识的“specialuser”;

$mysql-specialuser'-p's3curepa5wrd'-h10.61.130.89数据库105

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

但是,这成功了:

mysql>将databasev105.*上的select授予由“s3curepa5wrd”标识的“specialuser”;

$mysql-specialuser'-h10.300.300.400数据库105-p

输入密码:

Chiwda
Reply   •   5 楼
Chiwda    5 年前

这可能适用于很少的人,但这里。不要用夸张的话(!)在你的密码里。我用mariadb得到了上面的错误。当我把它简化成数字和字母时,它就起作用了。其他字符,如@和$work fine,我在同一个实例的不同用户中使用了这些字符。第五次回应 address 带我去修理。

yilin
Reply   •   6 楼
yilin    5 年前

操作系统:Windows

我的错误消息是:“mysql error 1045(28000):拒绝用户‘root’@‘localhost’(使用密码:yes)的访问”

我的理由是没有打开命令 administrator permission

所以我的解决方案是:用 管理员权限 ,然后它就工作了。

Raymond Wachaga
Reply   •   7 楼
Raymond Wachaga    5 年前

我也遇到同样的错误。无法工作的设置如下:

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环境下。

Sanjay
Reply   •   8 楼
Sanjay    6 年前

在窗口中,如何解决错误1045(28000):拒绝用户“root”@“localhost”的访问(使用密码:否)

1) Uninstall mysql from control panel
2)Delete MySql folder from C:\Program Files,C:\Program Files (x86) and C:\ProgramData
3)Install mysql
dxvargas
Reply   •   9 楼
dxvargas    9 年前

我通过删除旧的错误用户“bill”条目解决了这个问题(这是重要的部分:两者都来自 mysql.user用户 数据库 ,然后创建与sad之前相同的用户:

FLUSH PRIVILEGES;
CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;
FLUSH PRIVILEGES;

工作,用户正在连接。现在我要删除一些previleges:)

Shnkc
Reply   •   10 楼
Shnkc    10 年前

当你跑的时候 mysql -u bill -p ,请 localhost 已解析为您的IP,因为它是127.0.0.1 /etc/hosts 文件,作为默认值 127.0.0.1 localhost 存在。所以,mysql将您解释为 bill@localhost 不被授予 bill@'%' 是的。这就是为什么有两个不同的记录 root 结果中的用户 select host, user from mysql.user; 查询。

处理这个问题有两种方法。

一个是指定一个IP,它不是由 /ETC/主机 尝试登录时的文件。例如,服务器的IP是 10.0.0.2 是的。运行命令时 mysql -u bill -p -h 10.0.0.2 ,您将能够登录。如果你打字 select user(); ,您将得到 bill@10.0.0.2 是的。当然,任何域名都不应该解析为 /ETC/主机 文件。

其次,您需要为这个特定的域名授予访问权限。为了 帐单@localhost ,您应该调用命令 grant all privileges on *.* to bill@localhost identified by 'billpass'; .在这种情况下,您可以使用命令登录 mysql-u比尔-p 是的。一旦登录, 选择用户(); 命令返回 帐单@localhost 是的。

但这只是为了让您尝试在同一主机上登录mysql服务器。从远程主机上看,mysql的行为符合预期,“%”将授予您登录权限。

David A. Gray
Reply   •   11 楼
David A. Gray    5 年前

我发现另一个出现在表面上的案例是边缘案例;我可以通过select into导出到文件系统。作为根文件输出,但不是作为常规用户输出。虽然这可能是一个权限问题,但我已经看过了,没有看到特别明显的东西。我所能说的是,作为对相关数据库拥有所有权限的普通用户执行查询将返回导致我进入本主题的拒绝访问错误。当我发现在一个旧项目中成功使用select into'outfile的脚本时,我注意到我是以根用户身份登录的。果然,当我以根用户身份登录时,查询按预期运行。

Murmel ysk
Reply   •   12 楼
Murmel ysk    6 年前

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

让mysql守护进程以正常方式运行。启动mysql客户端,如下所示

mysql -u debian-sys-maint -p

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

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

Abhijit Jagtap
Reply   •   13 楼
Abhijit Jagtap    6 年前

调试总结

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

很有可能,您可能在工作中多次遇到此问题。由于输入用户名或密码不正确,我经常遇到这个问题。虽然这是其中一个原因,但还有很多机会你可能会得到这个问题。有时,它看起来非常相似,但是当你深入研究时,你会发现导致这个错误的多种因素。这篇文章将详细解释大多数常见的原因并解决这个问题。

可能的原因:

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

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

解决方案:

解决这类错误的方法非常简单。只要输入正确的用户名和密码。此错误将被解决。如果忘记密码,可以重置用户名/密码。 如果忘记了管理员/根帐户的密码,有很多方法可以重置/重新获取根密码。我将发表另一篇文章,介绍如何重置根密码,以防您忘记根密码。

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

mysql为用户访问提供了基于主机的限制,作为安全特性。在我们的生产环境中,我们过去只将访问请求限制在应用服务器上。此功能在许多生产场景中非常有用。

解决方案:

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

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

这种类型的错误发生在您试图访问的用户不存在于MySQL服务器上时。

解决:

当您面对这类问题时,只需检查用户是否存在于MySQL用户表中。如果记录不存在,用户无法访问。如果需要该用户访问,请使用该用户名创建一个新用户。

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

要点

  • 在定义用户主机时不建议使用通配符,请尝试使用确切的主机名。

  • 从远程计算机禁用根登录。

  • 使用代理用户概念。

与此主题相关的概念很少,而深入了解这些主题的细节是本文的不同范围。我们将在接下来的文章中探讨以下相关主题。

  • 如果忘记mysql服务器的根密码,该怎么办?
  • mysql访问权限问题和用户相关表。
  • 具有最佳实践的mysql安全特性。

我希望这篇文章能帮助你修复mysql错误代码1045拒绝用户访问mysql。

Alan
Reply   •   14 楼
Alan    8 年前

不确定其他人是否会觉得这有帮助,但我遇到了同样的错误,并搜索了所有匿名用户…没有任何。问题的最终结果是,用户帐户被设置为“需要ssl”—这是我在phpmyadmin中找到的,方法是转到用户帐户并单击用户的编辑权限。一旦我取消了这个选项,一切都按预期进行了!

maxelost
Reply   •   15 楼
maxelost    7 年前

对我来说,这个问题是由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”@“%”的插件值为空。用户将被忽略,任何人都不能再使用此用户登录。

我把这个答案贴在这里也许是为了避免有人像我一样在这个问题上花费同样荒谬的时间。

Pranit More
Reply   •   16 楼
Pranit More    7 年前

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

$ 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>
Gerd
Reply   •   17 楼
Gerd    8 年前

区别在于:

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;
Erik
Reply   •   18 楼
Erik    8 年前

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

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

后来发现这些观点是罪魁祸首。我们的对象传输使用的是另一个(和远程:admin@ip address)用户,而不是本地网站用户。因此,视图是以“admin”@“ip-address”作为定义者创建的。视图创建安全性默认为

SQL SECURITY DEFINER

当本地web用户试图使用视图时,会发现定义者缺乏使用表的权限。一旦安全性更改为:

SQL SECURITY INVOKER

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

Ali
Reply   •   19 楼
Ali    11 年前

好吧,我不确定,但可能是mysql安装目录中的.cnf文件造成的。 注释掉这一行,问题就可以解决了。

bind-address = 127.0.0.1
David Refaeli
Reply   •   20 楼
David Refaeli    5 年前

我有一个类似的问题-在我第一次尝试以根用户身份进入mysql时,它告诉我拒绝访问。原来我忘了用sudo…

因此,如果在根目录首次尝试时失败,请尝试:

sudo mysql -u root -p

然后输入你的密码,这就可以了。