Tüm ana bilgisayarlardan MySQL root erişimi


152

MySQL sunucusunu uzak bir Ubuntu makinesine kurdum. rootKullanıcı tanımlı mysql.usermasanın bu şekilde:

mysql> SELECT host, user, password FROM user WHERE user = 'root';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| localhost        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1              | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

rootStandart mysqlistemciyi kullanarak aynı uzak makine komut satırı arayüzünden kullanıcıyla erişebilirim . Şimdi internetteki her ana bilgisayardan root erişimine izin vermek istiyorum , bu yüzden aşağıdaki satırı eklemeyi denedim ( hostsütun hariç, önceki dökümünden ilk satırın tam bir kopyası ):

mysql> SELECT host, user, password FROM user WHERE host = '%';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| %                | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

Ama kişisel bilgisayarımdaki istemcim bana söylemeye devam ediyor (sunucu IP'sini gizledim):

SQL Hatası (2003): '46 .xxx '(10061) üzerinde MySQL sunucusuna bağlanılamıyor

Bunun bir kimlik doğrulama hatası mı yoksa bir ağ hatası mı olduğunu söyleyemem. Sunucu güvenlik duvarında, bağlantı noktası 3306 / TCP'yi 0.0.0.0/0 için etkinleştirdim ve bu benim için uygun ...


3306 numaralı bağlantı noktasından makineye telnet yapabilir misiniz
mihaisimi

3
büyük olasılıkla MySQL arka plan programı 46.xxx üzerinde değil, sadece localhost üzerinde dinliyor. Arayın bind-addressmy.cnf
Maxim Krizhanovsky

1
Böylece, dünya + köpek artık kök şifrenizin karma değerine, köke Internet'teki herhangi bir ana bilgisayardan ve IP adresinizin ilk baytından erişilebileceği bilgisine sahiptir. Bunun sadece küçük bir endişe olduğunu düşünmüyor musunuz?
eggyal

Yanıtlar:


362

Bu süreçte iki adım var:

a) İmtiyazlar tanınması. Kök kullanıcı 'password'mevcut kök şifrenizle bu yedek ile yürüttüğü için:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

b) tüm adreslere bağlanma:

En kolay yol, dosyanızdaki satırı yorumlamaktırmy.cnf :

#bind-address = 127.0.0.1 

ve mysql'yi yeniden başlat

service mysql restart

Varsayılan olarak yalnızca localhost'a bağlanır, ancak satırı yorumlarsanız bulduğu tüm arabirimlere bağlanır. Satırı açıklamak eşdeğerdir bind-address=*.

Mysql hizmetinin bağlandığı yeri kök olarak yürütmek için:

netstat -tupan | grep mysql

Ubuntu 16 Güncellemesi:

Yapılandırma dosyası (şimdi)

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

(en azından standart Ubuntu 16'da)


5
Tamam, sorun bağlayıcı adresti. Teşekkür ederim. @Darhazer Thank you too :)
lorenzo-s

2
Mevcut hibeleri sorgulamak için: `` 'root' @ '%' İÇİN HİBELERİ GÖSTER;
robsch

5
Ayrıca root @% 'in diğer kullanıcılara izin vermesine izin vermek için (a) adımından hemen sonra: GRANT USAGE ON *. * HİBE SEÇENEĞİ İLE' root '@'% ';
Caleb

1
Yapılandırma dosyası (şimdi) /etc/mysql/mysql.conf.d/mysqld.cnf (en azından standart Ubuntu 16'da)
jgp

2
Uzaktan sunucuya uzaktan bağlanabilmek için bunu yapmam gerekiyordu:USE mysql; UPDATE user SET Grant_priv='Y' WHERE user='root';
Sviderskiy Dmitriy

35

Aşağıdaki sorguyu çalıştırın:

use mysql;

update user set host='%' where host='localhost'

NOT: Üretim kullanımı için önerilmez.


2
Bu mükemmel bir çözüm değil. Çalışabilir. Benim için bir hata üretti: ERROR 1062 (23000): 'PRIMARY' anahtarı için '% -root' girişi yineleniyor
Scriptlabs

2
@Scriptlabs, kullanıcı tablosunda bir dizi 'localhost' içeren birden fazla giriş olma olasılığı vardır. Ve root.localhost, root.127.0.0.1, root.::1 dahil olmak üzere köklü birden fazla satır. Bu yüzden güncellemek yerine ayrı bir kullanıcı eklemekten daha iyisiniz, bu yüzden bu cevabı indiriyorum.
Mike Purcell

4
FLUSH PRIVILEGES değil; sonra da gerekli?
Nom1fan

1
bu benim için çalışıyor. bunu dene. update mysql.user set host='%' where user='root'
nur zazin


7

MYSQL 8.0 - açık mysql komut satırı istemcisi
* * 'root' @ 'localhost' TÜM AYRINTILARI VERİN;
mysql kullan
UPDATE mysql.user SET ana bilgisayar = '%' NEREDEN kullanıcı = 'kök';
MySQL hizmetini yeniden başlat


4

Raspbian'da çalışan MariaDB - bağlama adresi içeren dosyanın yerini belirlemek zordur. MariaDB'nin konu hakkında çok yararlı olmayan bilgileri var.

kullandım

# sudo grep -R bind-address /etc 

lanet olası şeyin yerini bulmak için.

Ayrıca yukarıdaki herkesin işaret ettiği gibi mysql ayrıcalıkları ve ana bilgisayarlar ayarlamak zorunda kaldı.

Ayrıca, Raspberry Pi'ye uzaktan bağlantılar için 3306 bağlantı noktasını açmak için biraz eğlenceli zaman geçirdim - sonunda iptables kalıcı .

Şimdi her şey harika çalışıyor.


1

İşletim sisteminize bağlı birçok ağınız varsa, bu ağlardan birini my.conf dosyasındaki bind-addres'de belirtmeniz gerekir. Bir örnek:

[mysqld]
bind-address = 127.100.10.234

bu ip bir ethX yapılandırmasından.


1
Lütfen daha fazla ayrıntı ekleyin. Bu ayarın hangi dosya veya çerçevede yapılması gerekir? Lütfen ethX yapılandırması hakkında daha spesifik olun.
BPS

1

Benim durumumda "bağlama adresi" ayarı sorun oldu. Bu ayarı yorumlarında my.cnfyaptığımız değil yardım çünkü benim durumumda MySQL, nedense 127.0.0.1 varsayılan olarak ayarlamak.

MySql'in hangi ayarı kullandığını doğrulamak için yerel kutunuzdaki komut satırını açın:

mysql -h localhost -u myname -pmypass mydb

Geçerli ayarı okuyun:

Show variables where variable_name like "bind%"

Tüm ana bilgisayarlardan erişime izin vermek istiyorsanız burada 0.0.0.0'ı görmelisiniz. Durum böyle değilse /etc/mysql/my.cnf, [mysqld] bölümünün altında bağlantı adresinizi düzenleyin ve ayarlayın:

bind-address=0.0.0.0

Son olarak, yeni ayarı almak için MySql sunucunuzu yeniden başlatın:

sudo service mysql restart

Tekrar deneyin ve yeni ayarın alınıp alınmadığını kontrol edin.


-2

mysql_update ihtiyacınız olan şey bu.

Neden MySql nezaketle bunu yapan bir araç inşa zaman kimse bu sorunu düzeltmek için daha karmaşık yollarını takip bilmiyorum ...

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.