Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL ERROR 1045 (28000):Akses ditolak untuk pengguna 'bill'@'localhost' (menggunakan kata sandi:YA)

Anda mungkin memiliki pengguna anonim ''@'localhost' atau ''@'127.0.0.1' .

Sesuai manual :

Ketika beberapa kecocokan dimungkinkan, server harus menentukan mana yang akan digunakan. Ini menyelesaikan masalah ini sebagai berikut:(...)

  • Ketika klien mencoba untuk terhubung, server melihat melalui baris [tabel mysql.user] dalam urutan yang diurutkan.
  • Server menggunakan baris pertama yang cocok dengan nama host dan nama pengguna klien.

(...)Server menggunakan aturan pengurutan yang mengurutkan baris dengan nilai Host paling spesifik terlebih dahulu .Nama host harfiah [seperti 'localhost'] dan alamat IP adalah yang paling spesifik.

Oleh karena itu, pengguna anonim seperti itu akan "menutupi" pengguna lain seperti '[any_username]'@'%' saat menghubungkan dari localhost .

'bill'@'localhost' cocok dengan 'bill'@'%' , tetapi akan cocok (mis.) ''@'localhost' sebelumnya.

Solusi yang disarankan adalah menghapus pengguna anonim ini (biasanya ini adalah hal yang baik untuk dilakukan).

Suntingan di bawah ini sebagian besar tidak relevan dengan pertanyaan utama. Ini hanya dimaksudkan untuk menjawab beberapa pertanyaan yang diajukan di komentar lain dalam utas ini.

Edit 1

Mengautentikasi sebagai 'bill'@'%' melalui soket.

    [email protected]:/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() |
    +----------------+----------------+
    | [email protected] | [email protected]%         |
    +----------------+----------------+
    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)

Edit 2

Pengaturan yang sama persis, kecuali saya mengaktifkan kembali jaringan, dan sekarang saya membuat pengguna anonim ''@'localhost' .

    [email protected]:/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

    [email protected]:/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)
    [email protected]:/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)
    [email protected]:/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 di edit 2, sekarang memberikan kata sandi pengguna anonim.

    [email protected]:/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() |
    +----------------+----------------+
    | [email protected] | @localhost     |
    +----------------+----------------+
    1 row in set (0.01 sec)

Kesimpulan 1, dari edit 1:Seseorang dapat mengautentikasi sebagai 'bill'@'%' melalui soket.

Kesimpulan 2, dari edit 2:Apakah seseorang terhubung melalui TCP atau melalui soket tidak berdampak pada proses otentikasi (kecuali seseorang tidak dapat terhubung sebagai orang lain selain 'something'@'localhost' melalui soket, tentu saja).

Kesimpulan 3, dari edit 3:Meskipun saya menentukan -ubill , Saya telah diberikan akses sebagai pengguna anonim. Ini karena "aturan penyortiran" yang disarankan di atas. Perhatikan bahwa di sebagian besar penginstalan default, tanpa kata sandi, anonim pengguna ada (dan harus diamankan/dihapus).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah mungkin untuk mereferensikan satu kolom sebagai beberapa kunci asing?

  2. Geo-Search (Jarak) di PHP/MySQL (Kinerja)

  3. Bagaimana cara menggunakan CASE..WHEN yang benar di MySQL

  4. Cara Bootstrap MySQL atau MariaDB Galera Cluster - Diperbarui

  5. Menggunakan SQL untuk menentukan statistik jumlah kata dari bidang teks