社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

AleksAnderson IT • 5 年前 • 3057 次点击  

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

我已经连接到我的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
 
3057 次点击  
文章 [ 30 ]  |  最新文章 5 年前
Abhijeet Kamble
Reply   •   1 楼
Abhijeet Kamble    10 年前

我为自己找到的最好的解决办法是。

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

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

另外,当我从另一台机器并通过jenkins job尝试这个时,我的访问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';
Rohit Gupta fevangelou
Reply   •   2 楼
Rohit Gupta fevangelou    9 年前

解决方案是删除匿名(任何)用户!

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

Murmel ysk
Reply   •   3 楼
Murmel ysk    7 年前

如果忘记密码或要修改密码,可以执行以下步骤:

1:停止mysql

[根@maomao~]服务mysqld stop
正在停止MySQL:[确定]

2:使用“跳过授权表”重新启动mysql

[根@mcy400~]mysqld_safe--跳过授权表
[根@cy400~]使用/var/lib/mysql中的数据库启动mysqld守护进程

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

[根@cy400~]mysql-u根
欢迎使用mysql监视器。命令以;或结束。

4:更改用户数据库

mysql>使用mysql
读取表信息以完成表和列名 您可以关闭此功能以使用-a快速启动 数据库已更改

5:修改密码新密码应输入到

mysql>update user set password=password('root123'),其中user='root';
查询正常,3行受影响(0.00秒)
匹配的行:3已更改:3警告:0

6:冲洗

mysql>刷新权限;

7:退出

mysql>退出
拜伊

8:重新启动mysql

[根@cy400~]服务mysqld restart;
正在停止MySQL:[确定]
启动mysql:[确定]

Bingo_4“您可以使用用户名和新密码连接数据库:

[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
mimoralea
Reply   •   4 楼
mimoralea    10 年前

别让自己头疼了…您的问题可能是密码周围缺少引号。至少那是我绕了我3个小时的案子。

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

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

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

mstram
Reply   •   5 楼
mstram    10 年前

在我的案例中,一个相关的问题是尝试使用以下方式连接:

mysql -u mike -p mypass

空白 显然是允许在-u“uname”之间,但是 不是 在-p和密码之间#

因此需要:

mysql -u mike -pmypass

否则-p之间有空白 我的通行证 mysql将“mypass”作为 分贝 名称

nos
Reply   •   6 楼
nos    13 年前

当你打字的时候 mysql -u root -p ,则通过本地unix套接字连接到mysql服务器。

不管你给多少钱, 'bill'@'%' 只匹配TCP/IP连接就够奇怪了。

如果要授予对本地unix套接字的访问权限,则需要授予“bill”@“localhost”特权,奇怪的是,这与“bill”@“127.0.0.1”不一样。

您还可以使用tcp/ip与mysql命令行客户机连接,以匹配您已经授予的特权,例如run mysql -u root -p -h 192.168.1.123 或者你的盒子里有哪个本地IP地址。

garrettmac
Reply   •   7 楼
garrettmac    8 年前

太晚了

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


mysql-u根-p

而且只是按一下 [ENTER] 密码。


一旦我做到了,它就成功了。希望这能帮助别人。

Community RolandoMySQLDBA
Reply   •   8 楼
Community RolandoMySQLDBA    8 年前

当你跑的时候

mysql -u bill -p

得到这个错误

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

mysqld希望您连接为 bill@localhost

尝试创建 帐单@localhost

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

如果要远程连接,必须使用TCP/IP指定DNS名称、公用IP或127.0.0.1:

mysql -u bill -p -hmydb@mydomain.com
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP

登录后,请运行此

SELECT USER(),CURRENT_USER();

USER() 报告您如何尝试在mysql中进行身份验证

CURRENT_USER() 报告如何从 mysql.user用户 桌子

这将使您更好地了解如何以及为什么允许您登录mysql。为什么要知道这个观点很重要?它与用户身份验证排序协议有关。

下面是一个例子:我将在我的桌面mysql上创建一个匿名用户

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| lwdba   | %         |
| mywife  | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
7 rows in set (0.00 sec)

mysql> grant all on *.* to x@'%';
Query OK, 0 rows affected (0.02 sec)

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| lwdba   | %         |
| mywife  | %         |
| x       | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)

mysql> update mysql.user set user='' where user='x';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

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

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
|         | %         |
| lwdba   | %         |
| mywife  | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)

mysql>

确定以匿名用户身份登录:

C:\MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.12-log MySQL Community Server (GPL)

Copyright (c) 2000, 2010, 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> select user(),current_user();
+---------------+----------------+
| user()        | current_user() |
+---------------+----------------+
| rol@localhost | @%             |
+---------------+----------------+
1 row in set (0.00 sec)

mysql>

认证顺序非常严格。它从最具体到最少地检查。 I wrote about this authentiation style in the DBA StackExchange 是的。

必要时不要忘记显式调用tcp作为mysql客户端的协议。

bstpierre Edgar Aviles
Reply   •   9 楼
bstpierre Edgar Aviles    12 年前

尝试:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
Luke Fritz RandomSeed
Reply   •   10 楼
Luke Fritz RandomSeed    8 年前

你可能有一个匿名用户 ''@'localhost' ''@'127.0.0.1' 是的。

按照 the manual :

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

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

(…) 服务器使用排序规则对行进行排序 首先是最具体的主机值 是的。 文字主机名 [例如“localhost”] IP地址是最具体的。

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

'bill'@'localhost' 不匹配 'bill'@'%' ,但会匹配(例如) '@'本地主机' 在动手之前。

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


下面的编辑大多与主要问题无关。这些只是为了回答本主题中其他评论中提出的一些问题。

编辑1

身份验证 “帐单”@“%” 通过插座。

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
    Welcome to the MySQL monitor (...)

    mysql> SELECT user, host FROM mysql.user;
    +------+-----------+
    | user | host      |
    +------+-----------+
    | bill | %         |
    | root | 127.0.0.1 |
    | root | ::1       |
    | root | localhost |
    +------+-----------+
    4 rows in set (0.00 sec)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | USER()         | CURRENT_USER() |
    +----------------+----------------+
    | bill@localhost | bill@%         |
    +----------------+----------------+
    1 row in set (0.02 sec)

    mysql> SHOW VARIABLES LIKE 'skip_networking';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | skip_networking | ON    |
    +-----------------+-------+
    1 row in set (0.00 sec)

编辑2

完全相同的设置,除了我重新激活了网络,现在我创建了一个匿名用户 '@'本地主机' 是的。

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
    Welcome to the MySQL monitor (...)

    mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass';
    Query OK, 0 rows affected (0.00 sec)

    mysql> Bye

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        --socket=/tmp/mysql-5.5.sock
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -h127.0.0.1 --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -hlocalhost --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

编辑3

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

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
    Welcome to the MySQL monitor (...)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | USER()         | CURRENT_USER() |
    +----------------+----------------+
    | bill@localhost | @localhost     |
    +----------------+----------------+
    1 row in set (0.01 sec)

结论1,编辑1:一个人可以认证为 “帐单”@“%” 通过插座。

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

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