Host 'xxx.xx.xxx.xxx' tidak diizinkan untuk terhubung ke server MySQL ini

668

Ini seharusnya sederhana, tetapi saya tidak bisa membuatnya bekerja untuk kehidupan saya.
Saya hanya mencoba menghubungkan dari jauh ke server MySQL saya.

menghubungkan as

mysql -u root -h localhost -p  

berfungsi dengan baik, tetapi berusaha

mysql -u root -h 'any ip address here' -p

gagal dengan kesalahan

ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server

Di mysql.usertabel, ada entri yang sama persis untuk pengguna 'root' dengan host 'localhost' dengan yang lain dengan host '%'.

Aku kehabisan akal, dan tidak tahu bagaimana melanjutkan. Setiap ide dipersilakan.

concept47
sumber
Tidak dapat masuk sebagai root di sebagian besar keadaan karena tindakan pencegahan keamanan ..
AO_

Jawaban:

816

Mungkin tindakan pencegahan keamanan. Anda dapat mencoba menambahkan akun administrator baru:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

Meskipun seperti yang dikatakan Pascal dan yang lainnya, bukan ide bagus untuk memiliki pengguna dengan akses semacam ini terbuka untuk IP apa pun. Jika Anda memerlukan pengguna administratif, gunakan root, dan tinggalkan di localhost. Untuk tindakan lain, tentukan dengan tepat hak yang Anda butuhkan dan batasi aksesibilitas pengguna seperti yang disarankan Pascal di bawah ini.

Edit:

Dari FAQ MySQL:

Jika Anda tidak dapat mengetahui mengapa Anda mendapatkan Access ditolak, hapus dari tabel pengguna semua entri yang memiliki nilai Host yang berisi wildcard (entri yang berisi karakter '%' atau '_'). Kesalahan yang sangat umum adalah menyisipkan entri baru dengan Host = '%' dan User = 'some_user', berpikir bahwa ini memungkinkan Anda untuk menentukan localhost untuk terhubung dari mesin yang sama. Alasan mengapa ini tidak berhasil adalah karena hak akses default menyertakan entri dengan Host = 'localhost' dan User = ''. Karena entri itu memiliki nilai Host 'localhost' yang lebih spesifik daripada '%', ia digunakan sebagai preferensi terhadap entri baru ketika menghubungkan dari localhost! Prosedur yang benar adalah memasukkan entri kedua dengan Host = 'localhost' dan Pengguna = 'some_user', atau untuk menghapus entri dengan Host = 'localhost' dan User = ''. Setelah menghapus entri, ingatlah untuk mengeluarkan pernyataan FLUSH PRIVILEGES untuk memuat ulang tabel hibah. Lihat juga Bagian 5.4.4, “Kontrol Akses, Tahap 1: Verifikasi Koneksi”.

Yannick Motton
sumber
17
Bagus menangkap Yannick, namun saya tidak akan merekomendasikan dia memberikan semua hak istimewa kepada pengguna non-root. Mungkin set yang dikurangi?
Corey Ballou
3
Yah, ini memang bukan ide yang bagus, tetapi mengizinkan 'root' untuk terhubung dari semua host adalah persis sama, karena itu pada tingkat privilege yang sama.
Yannick Motton
2
Saya pikir Anda kehilangan poin saya Pascal. Intinya adalah bahwa pengguna 'root' sudah memiliki hak-hak itu, dan ia ingin membiarkan ip mana pun mengotentikasi sebagai pengguna tersebut. Jadi jika ini benar-benar yang dia inginkan, contoh default untuk membuat pengguna administrator baru (yang memiliki hak yang sama persis) adalah alternatif dari apa yang dia coba.
Yannick Motton
2
Itu benar Yannick, saya membaca cepat dan akan menghapus komentar saya. Namun, AFAIK, izin berfungsi dengan baik di MySQL sehingga: 1. mungkin OP memodifikasi tabel hibah secara manual dan kemudian perlu menyiram hak istimewa. 2. mungkin dia tidak menggunakan sintaks hibah yang tepat untuk root. Menambahkan pengguna administratif lain mungkin merupakan solusi tetapi tidak akan menyelesaikan masalah IMHO asli.
Pascal Thivent
1
Saya merasa bahwa menyediakan akses dari semua host ke root bukanlah solusi yang tepat. Alih-alih saya membuat pengguna baru dan memberikan sejumlah hak istimewa yang berkurang, set yang saya gunakan digambarkan sebagai 'DBManager' di MySQL Workbench. Saya juga hanya mengizinkan akses dari sekelompok host tertentu di jaringan lokal saya, khususnya 192.168.0.%
Gustavo Guevara
272

Kita harus membuat new MySQL Userdan menetapkan hak istimewa seperti di bawah ini Query promptmelalui phpMyAdmin atau command prompt:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Setelah selesai dengan keempat pertanyaan, itu harus terhubung username / password

Aditya P Bhatt
sumber
5
Harus me-restart mysql setelah menyelesaikan langkah-langkah di atas untuk bekerja untuk saya.
tollbooth
Apakah Anda harus membuat nama pengguna @ localhost? Apakah itu tidak cukup jika Anda hanya membuat nama pengguna @%? Maksud saya, jika Anda hanya membuat nama pengguna @%, apakah Anda tidak dapat terhubung dengan pengguna itu dari localhost?
Sorin Postelnicu
1
ya @localhostmembuat masuk akal jika keistimewaannya berbeda entah bagaimana tapi di sini mereka sama dan mungkin akan lebih membingungkan daripada apa pun (seperti mengubah kata sandi yang satu tidak menyadari yang lain ada dan bahwa login Anda mungkin mengenai yang satu itu ).
Bratchley
sebagai seorang pemula itu sangat membantu saya
Muhammad Nayab
1
terima kasih itu memecahkan "SQLSTATE [HY000] [1130] Host 'DESKTOP-xxx.xx' saya tidak diizinkan untuk terhubung ke server MariaDB ini" dalam aplikasi laravel kemas dalam Windows
Zulqarnain
117

Pesan kesalahan saya mirip dan mengatakan ' Host XXX tidak diizinkan untuk terhubung ke server MySQL ini ' meskipun saya menggunakan root. Inilah cara memastikan bahwa root memiliki izin yang benar.

Pengaturan saya :

  • Ubuntu 14,04 LTS
  • MySQL v5.5.37

Larutan

  1. Buka file di bawah 'etc / mysql / my.cnf'
  2. Cek untuk:

    • port (secara default ini adalah 'port = 3306')
    • bind-address (secara default ini adalah 'bind-address = 127.0.0.1'; jika Anda ingin membuka semua maka cukup komentari baris ini. Sebagai contoh saya, saya akan mengatakan server yang sebenarnya ada di 10.1.1.7)
  3. Sekarang akses Database MySQL di server Anda yang sebenarnya (mis. Alamat jarak jauh Anda adalah 123.123.123.123 di port 3306 sebagai 'root' pengguna dan saya ingin mengubah izin pada 'dataentry' database. Ingatlah untuk mengubah Alamat IP, Port, dan nama basis data ke pengaturan Anda)

    mysql -u root -p
    Enter password: <enter password>
    mysql>GRANT ALL ON *.* to root@'123.123.123.123' IDENTIFIED BY 'put-your-password';
    mysql>FLUSH PRIVILEGES;
    mysql>exit
  4. sudo service restart mysqld

  5. Anda sekarang harus dapat terhubung dari jauh ke basis data Anda. Misalnya, saya menggunakan MySQL Workbench dan memasukkan 'Hostname: 10.1.1.7', 'Port: 3306', 'Username: root'
Akan
sumber
1
Anda dapat melewati batas use dataentry(karena kebanyakan orang tidak akan membuat database itu).
Jedidja
3
saya dapat melakukan ini tanpa memulai kembali mysqllayanan pada akhirnya
Ryan Tuck
5
FLUSH PRIVILEGESseharusnya memungkinkan Anda untuk tidak perlu memulai ulang.
Adam B
Ini bekerja untuk saya untuk MySQL 5.5 pada Windows 10 dengan FLUSH PRIVILEGES, tanpa memulai ulang layanan. Pada Windows, properti layanan harus mengidentifikasi file my.ini yang digunakan untuk konfigurasi (Properties | General | Path to executable)
FreeText
Saya berasumsi bahwa dengan menentukan bind-address = "0.0.0.0" itu akan mendengarkan semua antarmuka dan koneksi jarak jauh akan berfungsi, tetapi saya salah. Ya, netstat menunjukkan bahwa mysql mendengarkan pada 0.0.0.0 (semua antarmuka) tapi saya mendapatkan kesalahan dalam judul pertanyaan. Setelah saya menghapus garis bind-address sepenuhnya, itu mulai berfungsi. Aneh.
Henno
73

Anda perlu memberikan akses kepada pengguna dari nama host apa pun.

Ini adalah bagaimana Anda menambahkan hak istimewa baru dari phpmyadmin

Hak Istimewa Goto> Tambahkan Pengguna baru

masukkan deskripsi gambar di sini

Pilih Semua Host untuk nama pengguna yang diinginkan

masukkan deskripsi gambar di sini

HimalayanCoder
sumber
Sangat berguna, terima kasih
kawan
65

Lakukan saja langkah-langkah berikut:

1a) Terhubung ke mysql (via localhost)

mysql -uroot -p

1b) Jika server myslq berjalan di Kubernetes (K8s) dan sedang diakses melalui NodePort

kubectl exec -it [pod-name] -- /bin/bash
mysql -uroot -p

2) Buat pengguna

CREATE USER 'user'@'%' IDENTIFIED BY 'password';

3) Berikan izin

 GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;

4) Hak istimewa flush

FLUSH PRIVILEGES;
minhas23
sumber
4
GALAT 1045 (28000): Akses ditolak untuk 'root' @ 'localhost' pengguna (menggunakan passwoYES) Y
Gank
11
Seharusnya *.* ?
sgarg
26

Pesan tersebut *Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL serveradalah balasan dari server MySQL ke klien MySQL. Perhatikan bagaimana cara mengembalikan alamat IP dan bukan nama host.

Jika Anda mencoba terhubung mysql -h<hostname> -u<somebody> -pdan mengembalikan pesan ini dengan alamat IP, maka server MySQL tidak dapat melakukan pencarian terbalik pada klien. Ini penting karena itulah cara memetakan klien MySQL ke hibah.

Pastikan Anda dapat melakukan nslookup <mysqlclient> DARI server MySQL. Jika itu tidak berhasil, maka tidak ada entri di server DNS. Atau, Anda dapat memasukkan entri dalam file HOSTS server MySQL ( <ipaddress> <fullyqualifiedhostname> <hostname><- Urutan di sini mungkin penting).

Entri dalam file host server saya yang memungkinkan pencarian balik dari klien MySQL menyelesaikan masalah ini.

Dennis McLaughlin
sumber
1
"Adalah balasan dari server MySQL ke klien MySQL." Terima kasih, saya bertanya-tanya dari mana kesalahan itu berasal, mesin saya atau server. Saya memiliki kesalahan "KESALAHAN 1130 (HY000):" dll.
PJ Brunet
20

Cara sederhana:

Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD'; 

kemudian

FLUSH PRIVILEGES;

selesai!

pengguna5510975
sumber
apa yang ditandai dengan%?
tampilan data
1
itu seperti segalanya. Anda dapat hal seperti contoh: WHERE CustomerName LIKE 'a%'- Menemukan nilai apa pun yang dimulai dengan "a"
user5510975
16

Jika Anda mengubah tabel hibah secara manual (menggunakan INSERT, PEMBARUAN, dll.), Anda harus menjalankan FLUSH PRIVILEGESpernyataan untuk memberi tahu server untuk memuat ulang tabel hibah.

PS: Saya tidak akan merekomendasikan untuk mengizinkan host mana pun terhubung untuk pengguna mana pun (terutama bukan rootpenggunaannya). Jika Anda menggunakan mysql untuk aplikasi klien / server, lebih suka alamat subnet. Jika Anda menggunakan mysql dengan server web atau server aplikasi, gunakan IP tertentu.

Thivent Pascal
sumber
4

Cukup gunakan antarmuka yang disediakan oleh Alat GUI MySql (SQLyog):

Klik pada Manajer pengguna: masukkan deskripsi gambar di sini

Sekarang, jika Anda ingin memberikan akses UNTUK PC REMOTE LAINNYA, pastikan saja, seperti pada gambar di bawah ini, nilai bidang Host adalah% (yang merupakan wildcard)

masukkan deskripsi gambar di sini

BabaNew
sumber
4

Sebagian besar jawaban di sini menunjukkan Anda membuat pengguna dengan dua nilai host: satu untuk localhost, dan satu untuk %.

Harap dicatat bahwa kecuali untuk pengguna host lokal bawaan seperti root, Anda tidak perlu melakukan ini. Jika Anda hanya ingin membuat pengguna baru yang dapat masuk dari mana saja, Anda dapat menggunakannya

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;

dan itu akan bekerja dengan baik. (Seperti yang disebutkan orang lain, itu adalah ide yang buruk untuk memberikan hak administratif kepada pengguna dari domain apa pun.)

Erica Kane
sumber
3

cara sederhana adalah dengan login ke phpmyadmin dengan akun root, ada goto database mysql dan pilih tabel pengguna, ada edit akun root dan di bidang host tambahkan% wild card. dan kemudian melalui hak istimewa siram ssh

 FLUSH PRIVILEGES;
pengguna889030
sumber
Ini membantu saya dikombinasikan dengan ini: PEMBERIAN SEMUA HAK ISTIMEWA . UNTUK 'root' @ '%' DENGAN PILIHAN GRANT;
Lanklaas
2

Jika ini adalah pemasangan mysql baru-baru ini, maka sebelum mengubah apa pun, coba jalankan perintah ini dan kemudian coba lagi:

flush privileges;

Ini saja memperbaiki masalah bagi saya di Ubuntu 16.04, mysql 5.7.20. YMMV.

Alex R
sumber
2

Temukan saja cara yang lebih baik untuk melakukannya dari panel kontrol hosting Anda (Saya menggunakan DirectAdmin di sini)

cukup buka DB server target di panel kontrol Anda, dalam kasus saya: Manajemen MySQL -> pilih DB Anda -> Anda akan menemukan: "Access Hosts", cukup tambahkan host jarak jauh Anda di sini dan berfungsi sekarang! masukkan deskripsi gambar di sini

Saya kira ada opsi serupa pada C.panels lain seperti plesk, dll.

Saya harap ini juga membantu Anda.

Eran Levi
sumber
2

Yah, tidak ada jawaban di atas yang bekerja untuk saya. Setelah banyak penelitian, saya menemukan solusinya. Meskipun saya mungkin terlambat, ini dapat membantu orang lain di masa depan.

Login ke server SQL Anda dari terminal

 mysql -u root -p
 -- root password
GRANT ALL ON *.* to root@'XX.XXX.XXX.XX' IDENTIFIED BY 'password';

Ini harus menyelesaikan masalah izin.

Sebelum memecahkan kesalahan

Setelah menyelesaikan masalah

Selamat coding !!

Pratap Sharma
sumber
1

Nah yang bisa Anda lakukan hanyalah membuka file mysql.cfg dan Anda harus mengubah Bind-address untuk ini

bind-address = 127.0.0.1

dan kemudian Restart mysql dan Anda akan dapat menghubungkan server itu ke ini.

Lihat ini, Anda dapat memiliki ide bentuk itu.

ini sol nyata

Kishan Bheemajiyani
sumber
3
Ini terkait, tetapi bukan masalah yang sama. Kesalahan awalnya diterima menunjukkan klien berhasil terhubung ke server MySQL, tetapi kemudian gagal otentikasi. Jika bind-address diatur ke 127.0.0.1, Anda akan mendapatkan koneksi yang ditolak sebagai gantinya.
axon
Tapi ini adalah alamat yang akan memungkinkan semua Host terhubung ke server na?
Kishan Bheemajiyani
Tetapi memberikan semua izin kepada pengguna tidak akan menjadi pilihan bijak untuk itu jika Anda memiliki pengguna klien dan Anda tidak diizinkan untuk membuat pengguna dengan semua izin lalu apa yang akan menjadi Solusi.?
Kishan Bheemajiyani
1

Jika Anda menjalankan pada Windows; Solusi sederhana adalah dengan menjalankan wizard konfigurasi instance server MySQL. Itu ada di grup MYSQL Anda di menu mulai. Pada layar kedua dari terakhir klik kotak yang bertuliskan "izinkan akses root dari mesin jarak jauh".

Jan
sumber
1

Jika Anda memiliki WAMP Server + Windows 10 dan Anda menggunakannya untuk pengembangan daripada Klik Kanan pada Wamp Icon => Wamp Settings=>Check Allow Virtual Hosts other than 127* masukkan deskripsi gambar di sini

Adrian
sumber
0

Saya juga menghadapi masalah yang sama. Saya menyelesaikannya dalam 2 menit bagi saya, saya hanya daftar putih ip melalui cpanel

Misalkan Anda mencoba menghubungkan database server B dari server A. Pergi ke Server B Cpanel-> Remote MySQL-> masukkan Server A Alamat IP dan hanya itu.

pengguna3437729
sumber
0

Jawaban ini mungkin membantu seseorang ...

Semua jawaban ini tidak membantu, maka saya menyadari saya lupa untuk memeriksa satu hal penting .. Port :)

Saya memiliki mysql berjalan dalam wadah buruh pelabuhan yang berjalan di port yang berbeda. Saya menunjuk ke mesin host saya di port 3306, yang saya punya server mysql berjalan. Kontainer saya memperlihatkan server pada port 33060. Jadi selama ini, saya melihat server yang salah! lakukan!

Srini
sumber
0
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

kesalahan ini karena tidak ada kata sandi ke root, dan ini mungkin terjadi pada Anda ketika Anda mencoba terhubung dari luar.

Abd Abughazaleh
sumber
0

Solusi CPANEL

Pergi ke Cpanel, cari Remote MySQL. Tambahkan IP di bidang input:

Host (% wildcard diizinkan)

Komentar untuk mengingat IP apa itu. Itu untuk saya.

pengguna2060451
sumber
0

Ini berfungsi untuk koneksi mysql jarak jauh di masa mendatang!

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Arahkan ke garis yang dimulai dengan arahan alamat-bind. Seharusnya terlihat seperti ini:

    bind-address            = 0.0.0.0

Login ke mysql Anda sebagai terminal root

    mysql -u root -p
    -- root password

    CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

    CREATE USER 'username'@'%' IDENTIFIED BY 'password';

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

    FLUSH PRIVILEGES;

    EXIT;

akhirnya Berikan mesin eksklusif itu izin untuk terhubung ke database jarak jauh dengan perintah berikut.

    sudo ufw allow from remote_IP_address to any port 3306
soufiane ELAMMARI
sumber
-1

Jika seseorang yang mengalami masalah ini mengalaminya dari dalam SQLyog, ini terjadi:

Saya telah terhubung ke basis data jauh (dari dalam SQLyog) dan bekerja selama beberapa jam. Setelah itu saya meninggalkan sistem selama beberapa menit, lalu kembali untuk melanjutkan pekerjaan saya - KESALAHAN 1130 ! Tidak ada yang saya coba bekerja; Restart SQLyog tidak memperbaikinya. Lalu saya me-restart sistem - itu masih tidak berhasil.

Jadi saya mencoba menghubungkan dari terminal - itu berhasil. Kemudian coba lagi di SQLyog ... dan berhasil. Saya tidak bisa menjelaskannya selain 'quirkiness komputer acak', tetapi saya pikir itu bisa membantu seseorang.

Emmanuel
sumber
-1

jika Anda mencoba untuk mengeksekusi query mysql withouth mendefinisikan connectionstring, Anda akan mendapatkan kesalahan ini.

Mungkin Anda lupa mendefinisikan string koneksi sebelum eksekusi. sudahkah kamu memeriksanya? (maaf untuk bahasa Inggris yang buruk)

Ali CAKIL
sumber
-1

Masalah: root @ localhost tidak dapat terhubung ke instalasi baru server mysql-komunitas di openSUSE 42.2-1.150.x86_64. Mysql menolak koneksi - titik.

Larutan:

$ ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql     0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI
-rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm

Pengguna file.MYD memiliki ukuran 0 (sungguh?!). Saya menyalin semua 3 file dari sistem kerja lain.

$ /usr/sbin/rcmysql stop
$ cd /var/lib/mysql/mysql/
$ scp root@othersytem:/var/lib/mysql/mysql/user.* ./
$ /usr/sbin/rcmysql start
$ cd -
$ mysql -u root -p

Saya bisa masuk. Kemudian, itu hanya masalah menerapkan kembali semua hak istimewa skema. Juga, jika Anda menonaktifkan IPv6, aktifkan kembali sementara sehingga akun root @ :: 1 juga dapat berfungsi.

Alex D
sumber
-1

Ini berfungsi untuk DirectAdmin ;

  1. Pergi ke milikmu DirectAdmin.
  2. Pergi ke milikmu MySQL Management.
  3. Pilih milik Anda database.
  4. Di bawah Accesse Hosttab Anda , ada bidang. Anda harus mengisi kolom ini dengan xxx.xx.xxx.xx.
  5. Klik pada Add Host.

Jadi. Sekarang Anda dapat mengakses DB ini dengan your_database_username& Anda your_database_password.
Sangat sederhana!

اسماعیل زارع
sumber
-3

Semua jawaban di sini tidak berfungsi untuk saya, jadi saya harap ini dapat membantu pengguna lain di masa mendatang. Ini juga bisa menjadi masalah dalam kode kita, bukan hanya di MySQL saja.

Jika Anda menggunakan VB.NET

Alih-alih kode ini:

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database

 MysqlConn = New MySqlConnection()

Anda harus pindah MysqlConn = New MySqlConnection()di baris pertama. Jadi akan seperti ini

 MysqlConn = New MySqlConnection()

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database
Cary Bondoc
sumber