'Xxx.xx.xxx.xxx' ana bilgisayarının bu MySQL sunucusuna bağlanmasına izin verilmiyor


668

Bu çok basit olmalı, ama benim hayatım boyunca çalışmasını sağlayamıyorum .
Sadece MySQL sunucuma uzaktan bağlanmaya çalışıyorum.

olarak bağlanıyor

mysql -u root -h localhost -p  

iyi çalışıyor, ama deniyorum

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

hatayla başarısız

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

In mysql.usermasanın tam konakçının '%' ile başka şekilde ev sahibi 'localhost' ile kullanıcı 'kök' için aynı yazı bulunmaktadır.

Fikrimin sonuna geldim ve nasıl ilerleyeceğimi bilmiyorum. Herhangi bir fikir bekliyoruz.


Güvenlik önlemi nedeniyle çoğu durumda root olarak oturum
açılamıyor

Yanıtlar:


816

Muhtemelen bir güvenlik önlemi. Yeni bir yönetici hesabı eklemeyi deneyebilirsiniz:

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;

Pascal ve diğerlerinin belirttiği gibi, bu tür erişime sahip bir kullanıcının herhangi bir IP'ye açık olması iyi bir fikir değildir. Yönetici bir kullanıcıya ihtiyacınız varsa root kullanın ve localhost üzerinde bırakın. Diğer tüm eylemler için tam olarak ihtiyacınız olan ayrıcalıkları belirtin ve Pascal'ın aşağıda önerdiği gibi kullanıcının erişilebilirliğini sınırlayın.

Düzenle:

MySQL SSS bölümünden:

Access'in neden reddedildiğini anlayamıyorsanız, joker karakterler içeren Ana Bilgisayar değerlerine sahip tüm girişleri ('%' veya '_' karakter içeren girişler) kaldırın. Çok yaygın bir hata, Host = '%' ve User = 'some_user' ile yeni bir giriş eklemektir, bunun aynı makineden bağlanmak için localhost belirtmenize izin verdiğini düşünür. Bunun çalışmamasının nedeni, varsayılan ayrıcalıkların Host = 'localhost' ve User = '' ile bir girdi içermesidir. Bu girdinin '%' den daha spesifik bir Host değeri 'localhost' olduğundan, localhost'tan bağlanırken yeni girişe tercih edilir! Doğru prosedür Host = 'localhost' ve User = 'some_user' ile ikinci bir girdi eklemektir. veya girişi Host = 'localhost' ve User = '' ile silmek için. Girişi sildikten sonra, hibe tablolarını yeniden yüklemek için bir FLUSH PRIVILEGES ifadesi vermeyi unutmayın. Ayrıca bkz. Kısım 5.4.4, “Erişim Kontrolü, Aşama 1: Bağlantı Doğrulaması”.


17
İyi yakalama Yannick, ancak onu root olmayan bir kullanıcıya tüm ayrıcalıkları vermesini önermem. Belki azaltılmış bir set?
Corey Ballou

3
Bu gerçekten iyi bir fikir olmazdı, ancak 'root'un tüm ana bilgisayarlardan bağlanmasına izin vermek tamamen aynıdır, çünkü aynı ayrıcalık düzeyindedir.
Yannick Motton

2
Sanırım benim fikrimi özlüyorsun Pascal. Mesele şu ki, 'root' kullanıcısı zaten bu haklara sahiptir ve herhangi bir ipin o kullanıcı olarak kimliğini doğrulamasına izin vermek istemektedir. Bu gerçekten istediği şeyse, yeni bir yönetici kullanıcı oluşturmanın (tam olarak aynı haklara sahip) varsayılan örneği denediği şeye bir alternatiftir.
Yannick Motton

2
Doğru Yannick, hızlı okudum ve yorumumu kaldıracağım. Bununla birlikte, AFAIK, izinler MySQL'de iyi çalışıyor, bu yüzden: 1. belki de hibe tablolarını manuel olarak değiştirdikten sonra ayrıcalıkları temizlemeniz gerekir. 2. belki de kök için uygun hibe sözdizimini kullanmamıştır. Başka bir yönetici kullanıcı eklemek geçici bir çözüm olabilir, ancak gerçek sorunu IMHO çözmez.
Pascal Thivent

1
Tüm ana bilgisayarlardan köke erişim sağlamanın uygun bir çözüm olmadığını hissettim. Bunun yerine yeni bir kullanıcı oluşturdum ve daha az ayrıcalık sağladım, kullandığım küme MySQL Workbench'te 'DBManager' olarak tanımlandı. Ayrıca, yerel ağımdaki belirli bir grup ana bilgisayardan, özellikle 192.168.0'a erişime izin verdim.%
Gustavo Guevara

271

PhpMyAdmin veya komut istemi ile new MySQL Useraşağıdaki gibi bir ayrıcalık oluşturmak ve atamak gerekir Query 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;

Dört sorgunun tümü ile tamamlandığında, username / password


5
Bunun benim için çalışması için yukarıdaki adımları tamamladıktan sonra mysql yeniden başlatmak zorunda kaldı.
tollbooth

Username @ localhost oluşturmanız gerekiyor mu? @% Kullanıcı adını oluşturmanız yeterli değil mi? Yani, sadece% @ kullanıcı adı oluşturursanız, localhost'tan bu kullanıcıyla bağlantı kuramayacak mısınız?
Sorin Postelnicu

1
evet @localhostayrıcalıklar bir şekilde farklı olsaydı bir mantıklı olurdu ama burada aynılar ve muhtemelen her şeyden daha kafa karıştırıcı olacaklar (birinin diğerini fark etmediği şifreleri değiştirmek ve giriş bilgileriniz buna çarpıyor olabilir) ).
Bratchley

bir acemi olarak bana gerçekten yardımcı oldu
Muhammad Nayab

1
şükür "SQLSTATE [HY000] [1130]" Windows DESKTOP-xxx.xx "ana bu MariaDB sunucusuna bağlanmasına izin verilmiyor" çözer windows
Zulqarnain

117

Hata mesajım benzerdi ve kök kullanıyor olmama rağmen ' Host XXX'in bu MySQL sunucusuna bağlanmasına izin verilmiyor ' dedi . Kökün doğru izinlere sahip olduğundan nasıl emin olacağınız aşağıda açıklanmıştır.

Kurulumum :

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

Çözüm

  1. 'Etc / mysql / my.cnf' altındaki dosyayı açın
  2. Kontrol:

    • port (varsayılan olarak bu 'port = 3306')
    • bind-address (varsayılan olarak bu 'bind-address = 127.0.0.1'; herkese açmak istiyorsanız, sadece bu satırı yorumlayın. Örneğim için, gerçek sunucunun 10.1.1.7'de olduğunu söyleyeceğim)
  3. Şimdi gerçek sunucunuzdaki MySQL Veritabanına erişin (uzak adresinizin 3306 numaralı bağlantı noktasında 123.123.123.123 olduğunu 'root' kullanıcısı olarak söyleyin ve 'dataentry' veritabanındaki izinleri değiştirmek istiyorum. ayarlarınıza)

    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 hizmet mysqld yeniden başlatma

  5. Artık veritabanınıza uzaktan bağlanabilmeniz gerekir. Örneğin, MySQL Workbench kullanıyorum ve 'Hostname: 10.1.1.7', 'Port: 3306', 'Username: root'

1
use dataentrySatırı atlayabilirsiniz (çünkü çoğu kişi bu veritabanını oluşturmaz).
Jedidja

3
Ben mysqlsonunda hizmet yeniden başlatmadan bunu başardı
Ryan Tuck

5
FLUSH PRIVILEGESyeniden başlatmanıza gerek yok.
Adam B

Bu, hizmeti yeniden başlatmadan FLUSH PRIVILEGES ile Windows 10'da MySQL 5.5 için çalıştı. Windows'ta, hizmetin özellikleri yapılandırma için kullanılan my.ini dosyasını tanımlamalıdır (Özellikler | Genel | Yürütülebilir dosya yolu)
FreeText

Ben bind-address = "0.0.0.0" belirterek tüm arayüzleri dinleyeceğini ve uzak bağlantıların çalışacağını varsaydım ama yanılmışım. Evet, netstat, mysql'ın 0.0.0.0 (tüm arabirimler) üzerinde dinlediğini gösterdi ancak soru başlığında hata alıyordum. Bağlama adresi satırını tamamen kaldırdığımda çalışmaya başladı. Tuhaf.
Henno

72

Herhangi bir ana bilgisayar adından kullanıcıya erişim izni vermeniz gerekir.

Phpmyadmin'den yeni ayrıcalık bu şekilde eklenir

Ayrıcalıklara Git> Yeni Kullanıcı Ekle

resim açıklamasını buraya girin

İstediğiniz kullanıcı adı için Herhangi bir Sunucuyu seçin

resim açıklamasını buraya girin


Çok yararlı, teşekkürler kardeşim
Anderson Laverde

65

Sadece aşağıdaki adımları uygulayın:

1a) MySQL'e bağlanın (localhost ile)

mysql -uroot -p

1b) myslq sunucusu Kubernetes'te (K8s) çalışıyorsa ve bir NodePort üzerinden erişiliyorsa

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

2) Kullanıcı oluştur

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

3) Hibe izinleri

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

4) Yıkama ayrıcalıkları

FLUSH PRIVILEGES;

4
HATA 1045 (28000): 'root' @ 'localhost' kullanıcısı için erişim reddedildi (passwoYES kullanarak) Y
Gank

11
Olmalı *.* ?
sgarg

26

İleti *Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server, MySQL sunucusundan MySQL istemcisine verilen bir yanıttır. Ana bilgisayar adını değil, IP adresini nasıl döndürdüğüne dikkat edin.

Bağlanmaya çalışıyorsanız mysql -h<hostname> -u<somebody> -pve bu iletiyi IP adresiyle döndürüyorsa, MySQL sunucusu istemcide geriye doğru arama yapamaz. Bu önemlidir çünkü MySQL istemcisini hibelerle nasıl eşleştirir.

nslookup <mysqlclient>MySQL sunucusundan bir FROM yapabildiğinizden emin olun . Bu işe yaramazsa, DNS sunucusunda giriş yoktur. Alternatif olarak, MySQL sunucusunun HOSTS dosyasına bir girdi koyabilirsiniz ( <ipaddress> <fullyqualifiedhostname> <hostname><- Buradaki sipariş önemli olabilir).

Sunucumun ana bilgisayar dosyasındaki MySQL istemcisinin geriye doğru aramasına izin veren bir girdi bu sorunu çözdü.


1
"MySQL sunucusundan MySQL istemcisine bir yanıttır." Teşekkür ederim, hatanın nereden geldiğini merak ediyordum, makinem veya sunucu. Hata var "HATA 1130 (HY000):" vb.
PJ Brunet

20

Basit yol:

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

sonra

FLUSH PRIVILEGES;

bitmiş!


% ne anlama geliyor?
1919'da

1
her şey gibi. Örneğin şöyle bir şey olabilir: WHERE CustomerName LIKE 'a%'- "a" ile başlayan değerleri bulur
user5510975

16

Hibe tablolarını manuel olarak değiştirirseniz (INSERT, UPDATE vb. Kullanarak), FLUSH PRIVILEGESsunucuya hibe tablolarını yeniden yüklemesini bildirmek için bir bildirim yürütmelisiniz .

Not: Herhangi bir ana bilgisayarın herhangi bir kullanıcı için (özellikle rootkullanım için) bağlanmasına izin vermemeyi tavsiye etmem . Bir istemci / sunucu uygulaması için mysql kullanıyorsanız bir alt ağ adresi tercih edin. Bir web sunucusuyla veya uygulama sunucusuyla mysql kullanıyorsanız, belirli IP'leri kullanın.


4

MySql'in GUI Aracı (SQLyog) tarafından sağlanan arayüzü kullanın:

Kullanıcı yöneticisine tıklayın: resim açıklamasını buraya girin

Şimdi, DİĞER UZAKTAN BİR PC İÇİN erişim vermek istiyorsanız, sadece aşağıdaki resimde olduğu gibi, Ana Bilgisayar alan değerinin% (joker karakter) olduğundan emin olun.

resim açıklamasını buraya girin


4

Buradaki yanıtların çoğu size iki ana bilgisayar değeri olan kullanıcılar oluşturduğunuzu gösterir: biri için localhost, diğeri için %.

Kök gibi yerleşik bir localhost kullanıcısı dışında, bunu yapmanız gerekmediğini lütfen unutmayın. Herhangi bir yerden giriş yapabilen yeni bir kullanıcı oluşturmak istiyorsanız,

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

ve gayet iyi çalışacak. (Diğerlerinin de belirttiği gibi, herhangi bir alan adından bir kullanıcıya yönetici ayrıcalıkları vermek korkunç bir fikirdir.)


3

basit yolu kök hesabı ile phpmyadmin giriş, orada mysql veritabanı ve kullanıcı tablo seçin, orada kök hesabı düzenlemek ve ana alan% joker ekleyin. ve sonra ssh flush ayrıcalıklarıyla

 FLUSH PRIVILEGES;

Bu bana bununla birleştirdi: TÜM AYRICALIKLARI ONAYLA . HİBE SEÇENEĞİ İLE 'root' @ '%';
Lanklaas

2

Bu yeni bir mysql yüklemesi ise, başka bir şeyi değiştirmeden önce, sadece bu komutu çalıştırmayı deneyin ve sonra tekrar deneyin:

flush privileges;

Bu sadece benim için sorunu Ubuntu 16.04, mysql 5.7.20'de giderir. YMMV.


2

Barındırma kontrol panelinizden bunu yapmanın daha iyi bir yolunu bulun (burada DirectAdmin kullanıyorum)

benim durumumda: MySQL yönetimi -> DB seçin -> bulacaksınız: "Access Hosts", sadece uzak ana bilgisayarınızı buraya ekleyin ve şimdi çalışıyor! resim açıklamasını buraya girin

Sanırım plesk gibi diğer C. panellerinde de benzer bir seçenek var.

Umarım size de yardımcı olmuştur.


2

Yukarıdaki cevabın hiçbiri benim için işe yaramadı. Bir çok araştırmadan sonra bir çözüm buldum. Geç kalmış olmama rağmen bu gelecekte başkalarına yardımcı olabilir.

Bir terminalden SQL sunucunuza giriş yapın

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

Bu izin sorununu çözmelidir.

Hatayı çözmeden önce

Sorunu çözdükten sonra

Mutlu kodlama !!


1

Yapabileceğiniz şey sadece mysql.cfg dosyasını açmaktır ve Bind adresini bu şekilde değiştirmeniz gerekir

bağlama adresi = 127.0.0.1

ve sonra mysql'yi yeniden başlatın ve bu sunucuyu buna bağlayabilirsiniz.

Şuna bak, fikir formuna sahip olabilirsin.

bu gerçek sol


3
Bu ilişkilidir, ancak aynı sorun değildir. Başlangıçta alınan hata, istemcinin MySQL sunucusuna başarıyla bağlandığını, ancak kimlik doğrulamasında başarısız olduğunu gösterir. Bağlama adresi 127.0.0.1 olarak ayarlanmışsa, bunun yerine bağlantı reddedildi hatası alırsınız.
axon

Ama bu tüm Ana sunucuya na bağlanmasını sağlayacak adres mi?
Kishan Bheemajiyani

Eğer u kullanıcı kullanıcı ve u tüm izin ile kullanıcı oluşturmak için izin verilmiyorsa Ama kullanıcı için tüm izin vermek o bcoz için akıllıca bir seçenek olmayacak o zaman Çözüm ne olurdu?
Kishan Bheemajiyani

1

Windows üzerinde çalışıyorsanız; Basit bir çözüm, MySQL sunucusu yönetim ortamı yapılandırma sihirbazını çalıştırmaktır. Başlat menüsündeki MYSQL grubunuzda bulunur. Son ekranın ikinci sırasında "Uzak makinelerden root erişimine izin ver" kutusunu tıklayın.


1

WAMP Server + Windows 10'unuz varsa ve onu Wamp Simgesine Sağ Tıklama'dan ziyade geliştirme için kullanıyorsanız => Wamp Settings=>Check Allow Virtual Hosts other than 127* resim açıklamasını buraya girin


0

Ben de aynı sorunla karşı karşıyaydım. Benim için 2 dakika içinde çözdüm sadece cpanel üzerinden beyaz liste ip

Sunucu B'nin veritabanını A sunucusundan bağlamaya çalıştığınızı varsayalım. Sunucu B'ye gidin.


0

Bu cevap birine yardımcı olabilir ...

Tüm bu cevaplar yardımcı olmadı, sonra önemli bir şeyi kontrol etmeyi unuttuğumu fark ettim .. Liman :)

Farklı bir bağlantı noktasında çalışan bir docker kapsayıcısında çalışan mysql var. Ben çalışıyorum bir mysql sunucusu var bağlantı noktası 3306, ana makine işaret ediyordu. Benim kapsayıcı 33060 bağlantı noktasında sunucu ortaya koyar. Yani tüm bu zaman, ben yanlış sunucu bakıyordu! doh!


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

Bu hata kök için bir parola olmadığı için, ve bu belki dışarıdan bağlanmaya çalışırken sizinle oluştu.


0

CPANEL çözümü

Cpanel'e gidin, Remote MySQL'i arayın. IP'yi giriş alanına ekleyin:

Ana bilgisayar (% joker karaktere izin verilir)

IP'nin ne olduğunu hatırlamak için yorum yapın. Benim için buydu.


0

Bu gelecekte herhangi bir uzak MySQL bağlantısı için çalışıyor!

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

Bağlama adresi yönergesi ile başlayan satıra gidin. Şöyle görünmelidir:

    bind-address            = 0.0.0.0

MySQL'inize root terminali olarak giriş yapın

    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;

Son olarak, makineye aşağıdaki komutla uzaktan veritabanına bağlanmak için özel izin verin.

    sudo ufw allow from remote_IP_address to any port 3306

-1

Bu sorunla karşılaşan bir kişinin SQLyog içinden deneyimlemesi ihtimaline karşı, bu oldu:

Uzak veritabanına (SQLyog içinden) bağlanmıştım ve birkaç saat çalıştım. Daha sonra sistemden birkaç dakika ayrıldım, sonra işime devam etmek için geri geldim - ERROR 1130 ! Denediğim hiçbir şey işe yaramadı; SQLyog'u yeniden başlatmak sorunu çözmedi. Sonra sistemi yeniden başlattım - hala işe yaramadı.

Bu yüzden terminalden bağlanmayı denedim - işe yaradı. Sonra SQLyog üzerinde denedim ... ve çalıştı. Bunu 'rastgele bilgisayar tuhaflığı' dışında açıklayamıyorum, ama sanırım birine yardımcı olabilir.


-1

connectionstring tanımlayan mysql sorgusu yürütmeye çalışıyorsanız, bu hatayı alırsınız.

Muhtemelen yürütmeden önce bağlantı dizesini tanımlamayı unutursunuz. bunu kontrol ettin mi (kötü ingilizce için özür dilerim)


-1

Sorun: root @ localhost, openSUSE 42.2-1.150.x86_64 üzerinde yeni bir mysql-community-server kurulumuna bağlanamıyor. Mysql bağlantıları - dönemi reddediyor.

Çözüm:

$ 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

Dosya kullanıcı.MYD'nin 0 boyutu var (gerçekten ?! ). 3 dosyayı da başka bir çalışma sisteminden kopyaladım.

$ /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

Giriş yapabildim. O zaman, tüm şema ayrıcalıklarının yeniden uygulanması meselesiydi. Ayrıca, IPv6'yı devre dışı bıraktıysanız, root @ :: 1 hesabının da çalışabilmesi için geçici olarak yeniden etkinleştirin.


-1

Bu DirectAdmin için çalışıyor ;

  1. Git DirectAdmin.
  2. Git MySQL Management.
  3. Seçin database.
  4. Sekmenizin altında Accesse Hostbir alan var. Bu alanı doldurmalısınız xxx.xx.xxx.xx.
  5. Tıklayın Add Host.

Bitirdi. Artık bu DB'ye your_database_username& your_database_password.
Çok basit!


-3

Buradaki tüm cevaplar benim durumumda işe yaramadı, bu yüzden bu diğer kullanıcılara gelecekte yardımcı olabilirim. Bu, yalnızca MySQL'de değil, kodumuzda da bir sorun olabilir.

Kullanıyorsanız VB.NET

Bu kod yerine:

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

MysqlConn = New MySqlConnection()İlk satırda ilerlemelisin . Yani böyle olurdu

 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.