cari

Rumah  >  Soal Jawab  >  teks badan

Tidak dapat mengakses MySQL, kod ralat 1045 (28000): Akses dinafikan untuk pengguna 'bil'@'localhost' (menggunakan kata laluan: ya)

Biar saya nyatakan dahulu bahawa saya telah melihat banyak soalan yang dicadangkan dan tidak menemui jawapan yang berkaitan. Inilah yang saya lakukan.

Saya disambungkan ke contoh Amazon EC2 saya. Saya boleh log masuk ke pengguna root MySQL menggunakan arahan berikut:

mysql -u root -p

Kemudian saya mencipta bil pengguna baharu dengan hos %

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

Berikan semua kebenaran kepada bil pengguna:

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

Kemudian saya log keluar sebagai pengguna root dan cuba log masuk menggunakan pengguna bil:

mysql -u bill -p

Selepas memasukkan kata laluan yang betul, ralat berikut muncul:

Ralat 1045 (28000): Akses ditolak untuk "bil"@"localhost" pengguna (menggunakan kata laluan: YA)

P粉885562567P粉885562567438 hari yang lalu648

membalas semua(2)saya akan balas

  • P粉186904731

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

    Cuba:

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

    balas
    0
  • P粉287345251

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

    Anda mungkin mempunyai pengguna tanpa nama''@'localhost'''@'127.0.0.1'.

    Mengikut Manual:

    Oleh itu, pengguna tanpa nama seperti itu akan "menyekat" mana-mana pengguna lain sebagai '[any_username]'@'%'在从localhostapabila disambungkan.

    'bill'@'localhost'匹配'bill'@'%',但会在之前匹配(例如)''@'localhost'.

    Penyelesaian yang disyorkan ialah memadamkan pengguna tanpa nama ini (biasanya ini idea yang bagus).


    Suntingan di bawah kebanyakannya tidak berkaitan dengan soalan utama. Ini hanyalah untuk menjawab beberapa soalan yang ditanya dalam ulasan lain dalam benang ini.

    Edit 1

    Sahkan dengan 'bill'@'%' melalui soket.

    
        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 秒)
        
    

    Edit 2

    Persediaan yang sama, kecuali saya mengaktifkan semula rangkaian dan kini mencipta pengguna tanpa nama''@'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)
    
    

    Edit 3

    Situasi yang sama seperti dalam edit 2, kini menyediakan kata laluan untuk pengguna tanpa nama.

    
        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 秒)
    
    

    Kesimpulan 1, daripada suntingan 1: Pengesahan 'bill'@'%' boleh dilakukan melalui soket.

    Kesimpulan 2, daripada suntingan 2: Sama ada menyambung melalui TCP atau melalui soket tidak mempunyai kesan ke atas proses pengesahan (selain tidak dapat menyambung melalui soket kepada mana-mana pengguna lain selain 'something'@'localhost').

    Kesimpulan 3, daripada suntingan 3: Walaupun saya menyatakan -ubill, saya telah diberikan akses sebagai pengguna tanpa nama. Ini adalah kerana "peraturan pesanan" yang dicadangkan di atas. Sila ambil perhatian bahawa pada kebanyakan pemasangan lalai, terdapat pengguna tanpa namatanpa kata laluan (yang harus dilindungi/dialih keluar).

    balas
    0
  • Batalbalas