Aktifkan koneksi MySQL jarak jauh: ERROR 1045 (28000): Akses ditolak untuk pengguna

136

MySQL 5.1.31 berjalan di Windows XP.

Dari server MySQL lokal (192.168.233.142) saya dapat terhubung sebagai root sebagai berikut:

>mysql --host=192.168.233.142 --user=root --password=redacted

Dari mesin jarak jauh (192.168.233.163), saya dapat melihat bahwa port mysql terbuka:

# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).

Tetapi ketika mencoba untuk terhubung ke mysql dari mesin jarak jauh , saya menerima:

# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)

Saya hanya memiliki 2 entri di mysql.user:

Host         User     Password
--------------------------------------
localhost    root     *blahblahblah
%            root     [same as above]

Apa lagi yang perlu saya lakukan untuk mengaktifkan akses jarak jauh?

EDIT

Seperti yang disarankan oleh Paulo di bawah ini, saya mencoba mengganti entri mysql.user untuk% dengan entri khusus IP, jadi tabel pengguna saya sekarang terlihat seperti ini:

Host             User     Password
------------------------------------------
localhost        root     *blahblahblah
192.168.233.163  root     [same as above]

Saya kemudian menghidupkan ulang mesin, tetapi masalah tetap ada.

Mike Chamberlain
sumber

Jawaban:

213

Anda harus meletakkan ini sebagai root:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;

;

dengan IP adalah IP yang ingin Anda izinkan aksesnya, NAMA PENGGUNA adalah pengguna yang Anda gunakan untuk terhubung, dan PASSWORD adalah kata sandi yang relevan.

Jika Anda ingin mengizinkan akses dari IP apa pun, masukkan saja %alih-alih IP Anda

dan kemudian Anda hanya perlu meletakkan

FLUSH PRIVILEGES;

Atau restart server mysql dan hanya itu.

Octavio
sumber
Apakah ada cara untuk melakukan ini tanpa klien mysql lokal?
cmcginty
bagaimana cara menghapus hak istimewa dari ip tertentu?
Umair Ayub
4
stackoverflow.com/a/21151255/470749 membantu saya juga karena saya rasa pengaturan alamat-bind saya perlu dikomentari. Memberikan hak akses jarak jauh tidak cukup untuk membuatnya berfungsi.
Ryan
8
Tidak dijelaskan di jawaban, tapi ganti PASSWORDdengan kata sandi akun. Saya mencoba hanya perubahan di atas USERNAMEdan IPdan itu tidak berhasil sampai saya berubah PASSWORD.
Richard Parnaby-King
Setelah melakukan ini, ikuti juga apa yang dikatakan dalam jawaban berikut: stackoverflow.com/a/21151255/445438
budhajeewa
85

Saya mendapatkan kesalahan yang sama setelah memberikan akses jarak jauh sampai saya membuat ini:

Dari /etc/mysql/my.cnf

Di versi mysql yang lebih baru, lokasi file tersebut adalah /etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

(komentar baris ini: bind-address = 127.0.0.1)

Lalu lari service mysql restart.

bab
sumber
6
Atau, ubah ke bind-address = 0.0.0.0
lolski
2
Hanya berkomentar bind-addresstidak berhasil untuk saya. Salah satu bind-address = 0.0.0.0atau bind-address = <server_ip>bekerja.
chhantyal
58

Secara default di akses jarak jauh server MySQL dinonaktifkan. Proses untuk menyediakan akses jarak jauh kepada pengguna adalah.

  1. Buka folder sql bin saya atau tambahkan ke PATH
  2. Masuk ke root dengan mysql -uroot -proot(atau apa pun kata sandi rootnya.)
  3. Pada kesuksesan yang akan Anda dapatkan mysql>
  4. Berikan berikan akses semua untuk pengguna itu.

GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';

Di sini IP adalah alamat IP yang ingin Anda izinkan akses jarak jauh, jika kami memasukkan %alamat IP apa pun dapat mengakses dari jarak jauh.

Contoh:

C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin

C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.27 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.25 sec)

Ini untuk pengguna lain.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Semoga ini bisa membantu

Ravi Kant
sumber
1 untuk detail luar biasa, sangat membantu saya untuk melihat bahwa itu 0 rows affectedadalah norma :) Juga, service mysqld restartdisarankan di bagian akhir. [ mysqldterkadang hanya mysql]
Nathan Dortman
#Catatan: Untuk versi 5.6+, gunakan "berikan semua pada ..." (tanpa hak istimewa)
Nicke Manarin
21

Bantuan Paulo menuntun saya ke solusi. Itu adalah kombinasi dari berikut ini:

  • kata sandinya berisi tanda dolar
  • Saya mencoba menyambung dari shell Linux

Shell bash memperlakukan tanda dolar sebagai karakter khusus untuk perluasan ke variabel lingkungan, jadi kita perlu menghindarinya dengan garis miring terbalik. Kebetulan, kita tidak perlu melakukan ini jika tanda dolar adalah karakter terakhir dari kata sandi.

Sebagai contoh, jika kata sandi Anda adalah "pas $ word", dari Linux bash kita harus terhubung sebagai berikut:

# mysql --host=192.168.233.142 --user=root --password=pas\$word
Mike Chamberlain
sumber
4
Selain di atas, silakan periksa /etc/mysql/my.cnf dan komentar bind-address = 127.0.0.1
Buminda
2
Sebagai alternatif, seseorang dapat menggunakan tanda kutip tunggal untuk mencegah perluasan $: mysql --host=192.168.233.142 --user=root --password='pas$word' stackoverflow.com/a/6697781/500942
jalanb
'$' di kata sandi. Tak ternilai. Terima kasih banyak !!
Nagendra Kakarla
setelah membenturkan kepala saya ke monitor untuk beberapa saat saya menemukan ini dan itu berhasil. Saya punya! dan @ dalam kata sandi saya. Kata sandi diubah, hak istimewa dibilas dan saya kembali melakukannya. Terima kasih!
AJM
9

Apakah Anda memiliki firewall? pastikan port 3306 terbuka.

Di windows, secara default akun root mysql dibuat yang diizinkan untuk memiliki akses dari localhost hanya kecuali Anda telah memilih opsi untuk mengaktifkan akses dari mesin jarak jauh selama instalasi.

membuat atau memperbarui pengguna yang diinginkan dengan '%' sebagai nama host.

contoh:

CREATE USER 'krish'@'%' IDENTIFIED BY 'password';
Vamsi Krishna B
sumber
6
Server membalas dengan "ERROR 1045 (28000): Akses ditolak untuk" ... jika blok firewall akan mendapatkan batas waktu ...
Paulo H.
hanya ingin posting dulu. saya buruk
Vamsi Krishna B
@Krish - Semua yang Anda sarankan sudah tercakup dalam pertanyaan
Mike Chamberlain
5
  1. Coba flush privilegeslagi.

  2. Coba mulai ulang server untuk memuat ulang hibah.

  3. Coba buat pengguna dengan host "192.168.233.163". "%" tampaknya tidak mengizinkan semua (aneh)

Paulo H.
sumber
Terima kasih, saya sudah mencobanya tetapi tidak berhasil. Saya memperbarui pertanyaan dengan saran Anda.
Mike Chamberlain
4
Coba buat pengguna lain, dan jangan lupa untuk mengatur semua hibah:CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;
Paulo H.
4

Dalam kasus saya, saya mencoba untuk terhubung ke server mysql jarak jauh di cent OS. Setelah melalui banyak solusi (memberikan semua hak istimewa, menghapus pengikatan ip, mengaktifkan jaringan) masalah masih belum terpecahkan.

Ternyata, saat mencari berbagai solusi, saya menemukan iptables, yang membuat saya menyadari port mysql 3306 tidak menerima koneksi.

Berikut adalah catatan kecil tentang cara saya memeriksa dan menyelesaikan masalah ini.

  • Memeriksa apakah port menerima koneksi:

    telnet (ip server mysql) [portNo]

  • Menambahkan aturan tabel ip untuk mengizinkan koneksi di port:

    iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

  • Tidak akan merekomendasikan ini untuk lingkungan produksi, tetapi jika iptables Anda tidak dikonfigurasi dengan benar, menambahkan aturan mungkin masih belum menyelesaikan masalah. Dalam hal berikut ini harus dilakukan:

    layanan iptables berhenti

Semoga ini membantu.

Kushal
sumber
3

jika Anda menggunakan ip dinamis cukup berikan akses ke 192.168.2.% jadi sekarang Anda tidak perlu khawatir tentang memberikan akses ke alamat ip Anda setiap saat.

Nitin Jaiman
sumber
1

Saya kesulitan dengan login jarak jauh ke MYSQL untuk instans Amazon EC2 Linux saya. Menemukan solusinya adalah memastikan grup keamanan saya menyertakan aturan masuk untuk MySQL port 3306 untuk memasukkan alamat IP saya (atau 0.0.0.0/0 untuk di mana saja). Langsung bisa terhubung dari jarak jauh segera setelah saya menambahkan aturan ini.

Brendan Moore
sumber
1

Lokasi baru untuk file konfigurasi mysql adalah

/etc/mysql/mysql.conf.d/mysqld.cnf
stackMonk
sumber
0

Driver MySQL ODBC 3.51 adalah karakter khusus dalam kata sandi tidak ditangani.

"Peringatan - Anda mungkin mengalami sakit kepala yang parah dengan MySQL ODBC 3.51 jika kata sandi dalam perintah GRANT Anda berisi karakter khusus, seperti! @ # $% ^?. Driver ODBC MySQL ODBC 3.51 tidak mendukung karakter khusus ini di kotak kata sandi. Satu-satunya pesan kesalahan yang akan Anda terima adalah "Akses ditolak" (menggunakan kata sandi: YES) "- dari http://www.plaintutorials.com/install-and-create-mysql-odbc-connector-on-windows-7/

PiperKeith
sumber
0

Kombinasi pengguna / host mungkin dibuat tanpa sandi.

Saya berasumsi bahwa saat menambahkan host baru untuk pengguna yang sudah ada (menggunakan aplikasi GUI), kata sandi yang ada juga akan digunakan untuk kombinasi pengguna / host baru.

Saya bisa masuk dengan

mysql -u username -p PASSWORD

secara lokal, tetapi tidak dari IPADDRESS dengan

mysql -u --host=HOST -p PASSWORD

(Saya sebenarnya bisa masuk dari IPADDRESS tanpa menggunakan kata sandi)

mysql -u --host=HOST

Mengatur kata sandi memungkinkan akses:

set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';
andkrup
sumber
1
Terima kasih, saya menghabiskan banyak waktu untuk mencoba terhubung dari jarak jauh ke server Mysql saya dan jalur ini sangat membantu. Saat mengatur kata sandi pengguna, saya mendapat kesalahan ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal numberyang membawa saya ke artikel ini: knowmysql.blogspot.com/2013/09/… Setelah mengikuti langkah-langkah itu, akhirnya saya dapat terhubung ke server.
Andy Forceno