MySQL - ERROR 1045 (28000): Akses ditolak untuk pengguna

9

Saya baru saja menginstal salinan baru Ubuntu 10.04.2 LTS pada mesin baru. Saya login ke MySQL sebagai root:

david@server1:~$ mysql -u root -p123

Saya membuat pengguna baru bernama repl. Saya membiarkan host kosong, sehingga pengguna baru dapat memiliki akses dari lokasi mana pun.

mysql> CREATE USER 'repl' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

Saya memeriksa tabel pengguna untuk memverifikasi bahwa penggantian pengguna baru dibuat dengan benar.

mysql> select host, user, password from mysql.user;
+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| server1   | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| 127.0.0.1 | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| ::1       | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| localhost |                  |                                           |
| server1   |                  |                                           |
| localhost | debian-sys-maint | *27F00A6BAAE5070BCEF92DF91805028725C30188 |
| %         | repl             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-----------+------------------+-------------------------------------------+
8 rows in set (0.00 sec)

Saya kemudian keluar, mencoba masuk sebagai balasan pengguna, tetapi akses ditolak.

david@server1:~$ mysql -u repl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ mysql -urepl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ 

Mengapa akses ditolak?

davidjhp
sumber
Saya baru saja mencoba menjatuhkan pengguna dan membuatnya dengan host localhost, dan ini berhasil. BUAT PENGGUNA 'repl' @ 'localhost' DIIDENTIFIKASI OLEH '123'; Tetapi saya tidak ingin membatasi pengguna untuk beberapa host, saya lebih suka memiliki host.
davidjhp

Jawaban:

5

Alasan Anda tidak bisa masuk karena repl@'%'hubungannya dengan protokol otentikasi pengguna MySQL . Itu tidak mencakup pola pengguna seperti yang orang percaya.

Lihatlah bagaimana Anda mencoba masuk

mysql -u repl -p123

Karena Anda tidak menentukan alamat IP, mysql menganggap host adalah localhost dan mencoba untuk terhubung melalui file socket. Inilah sebabnya mengapa pesan kesalahan mengatakan Access denied for user 'repl'@'localhost' (using password: YES).

Orang akan berpikir repl@'%'akan memungkinkan repl@localhost. Menurut cara MySQL melakukan otentikasi pengguna , itu tidak akan pernah terjadi. Akankah ini membantu?

mysql -u repl -p123 -h127.0.0.1

Percaya atau tidak, mysql akan berusaha repl@localhostlagi. Mengapa? Klien mysql melihat 127.0.0.1dan mencoba file socket lagi.

Coba seperti ini:

mysql -u repl -p123 -h127.0.0.1 --protocol=tcp

Ini akan memaksa klien mysql untuk menggunakan protokol TCP / IP secara eksplisit. Maka tidak akan punya pilihan selain pengguna repl@'%'.

RolandoMySQLDBA
sumber
4

Anda harus mengeluarkan untuk localhost khusus untuk itu.

  GRANT USAGE ON *.* TO 'repl'@'localhost' IDENTIFIED BY '123';

Dan coba sambungkan.

Mannoj
sumber
1

Masalahnya adalah kedua akun ini, ditambahkan secara default.

http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html

+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost |                  |                                           |
| server1   |                  |                                           |
+-----------+------------------+-------------------------------------------+

Nama pengguna kosong adalah wildcard, jadi tidak peduli apa akun yang Anda gunakan, itu cocok dengan pengguna ini jika MySQL berpikir Anda terhubung dari localhost atau nama server lokal Anda (server1 dalam hal ini) ... karena mereka tidak memiliki kata sandi, apa pun kata sandi yang Anda coba salah. Otentikasi pengguna hanya mencoba kecocokan pertama, sehingga pengguna yang Anda buat tidak pernah diperhatikan ketika host Anda adalah host lokal (atau nama server Anda).

Hapus keduanya dari menu mysql. usermeja lalu FLUSH PRIVILEGES;.

Atau, skrip mysql_secure_installation dapat melakukan ini untuk Anda, meskipun saya cenderung lebih suka melakukan hal-hal secara manual.

http://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html

Michael - sqlbot
sumber
0

Pastikan bahwa semua bidang pada konektor diatur dengan detail yang benar

host = "localhost", user = "CorrectUser", passwd = "coRrectPasswd", database = "CorreCTDB"

Periksa juga kesalahan huruf besar dan kecil - 1045 bukan kesalahan Sintaks, tetapi ada hubungannya dengan detail yang salah pada konektor

Johan Swan
sumber
0

Basis data mungkin belum dikonfigurasikan namun cukup mengeluarkan panggilan tanpa-arg:

mysql <enter>

Server version: xxx

Copyright (c) xxx

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Mysql [(none)]> 

Jika Mysql harus menetapkan kata sandi root, Anda dapat menggunakan

mysql_secure_installation
TRicks43
sumber
-2

Ini bisa menjadi masalah dengan korupsi database mysql Anda. Tabel di dalam database mysql seperti tabel pengguna bisa rusak dan dapat menyebabkan dikeluarkan.

Silakan periksa

myisamchk / var / lib / mysql / mysql / * .MYI

Biasanya saat memeriksa atau memperbaiki tabel myisam kami ingin mengambil mysql dulu. Jika masalah ini masih belum selesai, silakan coba ini juga.

Jika mereka rusak maka Anda dapat memperbaikinya menggunakan

myisamchk --silent --force --fast /path/table-name.MYI

Terima kasih,

Masood

Masood Alam
sumber