首頁  >  問答  >  主體

無法存取MySQL,錯誤代碼1045 (28000): 使用者'bill'@'localhost'被拒絕存取(使用密碼:是)

首先讓我提到,我已經查看了許多建議的問題,但沒有找到相關的答案。以下是我正在做的事情。

我已連接到我的Amazon EC2執行個體。我可以使用以下命令登入MySQL root用戶:

mysql -u root -p

然後我建立了一個新使用者bill,主機為%​​

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

為使用者bill授予所有權限:

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

然後我退出root用戶,並嘗試使用bill用戶登入:

mysql -u bill -p

輸入正確的密碼後,出現以下錯誤:

錯誤 1045 (28000):使用者「bill」@「localhost」的存取被拒絕(使用密碼:YES)

P粉885562567P粉885562567368 天前587

全部回覆(2)我來回復

  • P粉186904731

    P粉1869047312023-09-18 07:57:18

    嘗試:

    ~$ mysql -u root -p
    输入密码:
    
    mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;

    回覆
    0
  • P粉287345251

    P粉2873452512023-09-18 00:36:21

    您可能有一個匿名使用者''@'localhost'''@'127.0.0.1'

    根據手冊

    因此,這樣的匿名用戶將「封鎖」任何其他用戶,例如'[any_username]'@'%'在從localhost連接時。

    'bill'@'localhost'符合'bill'@'%',但會在先前符合(例如)''@'localhost'

    推薦的解決方案是刪除這個匿名用戶(這通常是一個好主意)。


    下面的編輯對於主要問題來說大多不相關。這些只是為了回答本主題中其他評論中提出的一些問題。

    編輯1

    透過套接字以'bill'@'%'進行身份驗證。

    
        root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
        欢迎使用 MySQL monitor(...)
        
        mysql> SELECT user, host FROM mysql.user;
        +------+-----------+
        | user | host      |
        +------+-----------+
        | bill | %         |
        | root | 127.0.0.1 |
        | root | ::1       |
        | root | localhost |
        +------+-----------+
        共有 4 行(0.00 秒)
        
        mysql> SELECT USER(), CURRENT_USER();
        +----------------+----------------+
        | USER()         | CURRENT_USER() |
        +----------------+----------------+
        | bill@localhost | bill@%         |
        +----------------+----------------+
        共有 1 行(0.02 秒)
        
        mysql> SHOW VARIABLES LIKE 'skip_networking';
        +-----------------+-------+
        | Variable_name   | Value |
        +-----------------+-------+
        | skip_networking | ON    |
        +-----------------+-------+
        共有 1 行(0.00 秒)
        
    

    編輯2

    完全相同的設置,除了我重新啟動了網絡,並且現在創建了一個匿名用戶''@'localhost'

    
        root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
        欢迎使用 MySQL monitor(...)
        
        mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass';
        查询 OK,0 行受影响(0.00 秒)
        
        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
        欢迎使用 MySQL monitor(...)
    
        mysql> SELECT USER(), CURRENT_USER();
        +----------------+----------------+
        | USER()         | CURRENT_USER() |
        +----------------+----------------+
        | bill@localhost | @localhost     |
        +----------------+----------------+
        共有 1 行(0.01 秒)
    
    

    結論1,來自編輯1:可以透過套接字進行'bill'@'%'的身份驗證。

    結論2,來自編輯2:無論是透過TCP還是透過套接字連接,對身份驗證過程沒有影響(除了不能透過套接字連接除'something'@'localhost'之外的任何其他使用者)。

    結論3,來自編輯3:儘管我指定了-ubill,但我被授予了匿名用戶的存取權限。這是因為上面建議的「排序規則」。請注意,在大多數預設安裝中,存在一個沒有密碼的匿名使用者(應該進行安全性/刪除)。

    回覆
    0
  • 取消回覆