社区所有版块导航
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
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Luke Fritz RandomSeed

Luke Fritz RandomSeed 最近创建的主题
Luke Fritz RandomSeed 最近回复了
9 年前
回复了 Luke Fritz RandomSeed 创建的主题 » mysqli_connect():(28000/1045):拒绝用户“xxx”@“xxx”(使用密码:是)[重复]

你可能有一个匿名用户 ''@'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 (并应固定/移除)。