Tüm bir alt ağ için MySQL'e uzaktan erişim nasıl verilir?


94

Bu kodu kullanarak bir IP'ye kolayca erişim sağlayabilirim:

$ mysql -u root -p
Enter password:    
mysql> use mysql    
mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';     
mysql> FLUSH PRIVILEGES;

Ancak tüm 192.168.1. * Alt ağının veritabanına uzaktan erişmesine izin vermem gerekiyor.

Bunu nasıl yapabilirim?

Yanıtlar:


101

DÜZENLEME: Bu sayfadaki Malvineous'un yanıtına bakmayı ve bu yanıta olumlu oy vermeyi düşünün . Ağ maskeleri çok daha şık bir çözümdür.


IP adresinde joker karakter olarak bir yüzde işareti kullanmanız yeterlidir.

Gönderen http://dev.mysql.com/doc/refman/5.1/en/grant.html

Ana bilgisayar adında joker karakterler belirtebilirsiniz. Örneğin, user_name@'%.example.com'için de geçerlidir user_nameherhangi bir ev sahibi için example.comalan ve user_name@'192.168.1.%'geçerli user_nameherhangi bir ev sahibi için 192.168.1C sınıfı alt.


6
Bunu sadece böyle yaptım, ama diyelim ki, kullanıcı_adı@'192.168.1.my-hacked-rnds.killing.mysql.com '???? Şimdi devam edeceğim, bu MySQL olduğu için cevabı bilmek istemediğimi hissediyorum.
Florian Heigl

+ Florian, üstesinden gelinmesi gereken bir güvenlik katmanı eklediğinden, basitçe '%' kullanmaktan daha iyi olduğunu düşünüyorum, ancak zayıflığı hakkında iyi bir noktaya değindiğini düşünüyorum. Bu yapılandırmayı, diğer şeylerin yanı sıra endişelerinizi ortadan kaldırmak için bir güvenlik duvarı aracılığıyla erişimi kontrol edebileceğim ayrı bir alt ağda kilitlemek gibi başka yollarla kesinlikle tamamlıyorum.
Josiah

22
'192.168.1.my-hacked-rnds.killing.mysql.com' 'gibi örnekler özellikle dev.mysql.com/doc/refman/5.5/en/account-names.html adresinde belirtilmiştir : Bu tür girişimleri
Stefan Lasiewski

119

Bu aynı zamanda bir ağ maskesi kullanabilirsiniz benziyor , örneğin

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...

7
Teknik olarak doğru olan tek cevap olduğu için bu kabul edilen cevap olmalıdır. En az 5.5 tarihinden beri desteklenmektedir: dev.mysql.com/doc/refman/5.5/en/account-names.html
lifeofguenter

6
"172.16.0.0/16" gibi CIDR gösterimini kullanmaya çalışmayın, bu işe yaramaz. Her zaman tam ağ maskesini kullanın.
Oliver R.

Aralıktaki ilk IP adresini kullanmanız gerektiği anlaşılıyor; Örneğin 192.168.0.34/255.255.255.0 kullanmak başarısız olur!
Sander

@SanderBackus: gerçekten mantıklı olmayan ile 192.160.0.34/255.255.255.0aynıdır 192.168.0.34/24( /24yani son sayı, 34 değerini göz ardı ederek 0'dan 255'e kadar olabilir). IP için geçerli bir maske kullanırsanız işe yarıyor mu 192.168.0.34/255.255.255.252?
Malvineous

@Malvineous Bu benim açımdan buydu. 192.160.0.34/255.255.255.0 kullanırsanız, mysql 192.160.0.34'e izin vermez. Tam / 24'e izin vermek istedim (evet, belgelendiği gibi tam ağ maskesi kullandım), ancak görünüşe göre tam aralığa izin vermek için 192.160.0.0/255.255.255.0 kullanmanız gerekiyorsa.
Sander

28

Joker karakteriniz olarak sadece '%' kullanırsınız:

GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';

12
mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';  

Joker karakter, "*" yerine "%" dir


5

Karşılaştığım bir tuhaflığa dair bir not:
Düşünün:

db server:  192.168.0.101
web server: 192.168.0.102

Mysql.user'da 'user'@'192.168.0.102'password1 ve password2 ile başka bir kullanıcı tanımladıysanız 'user'@'192.168.0.%',

sonra,

web sunucusundan db sunucusuna password2 ile 'kullanıcı' olarak bağlanmaya çalışırsanız,

'user'@'192.168.0.102'Joker karakter 'user'@'192.168.0.%'kimlik doğrulaması yerine tek IP kimlik doğrulaması kullanıldığından , 'Erişim reddedildi' hatasıyla sonuçlanır .


2
Bunun sorunun cevabı olduğundan emin değilim. Orijinal soruya doğrudan bir cevap vermiyorsa, yorum olarak gönderilmelidir.
Kmeixner

13
Kmeixner, bir yoruma bu kadar çok şey yazmasını mı bekliyorsun? Biraz sağduyulu davran ve robot olmayı bırak. Bu topluluk, geliştiricilerin hayatlarını zorlaştırmamalarına yardımcı olmak içindir.
user1735921

0

sunucunuza bağlandıktan ve ana makinenize bağlanmak istediğinizde aşağıdaki adımları uygulamanız gerekir:

  1. yazma MySQL açık mysql
  2. yazmak ;GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
  3. mysql'den çıkmak için kontrol ve X'e basın
  4. yazmak nano /etc/mysql/my.cnf
  5. my.cnf klasörüne bağlama adresi = 127.0.0.1'den önce # yazın
  6. # bağlantı adresi = 127.0.0.1
  7. my.cnf klasörünü control + X ile kaydedin
  8. yazmak service mysql restart
  9. ana makinenize navicat ile bağlanabilirsiniz

0

@Malvineaus cevabıyla motive oldum, kendim denedim ve benim için işe yaramadığını fark ettim.

Alt ağ maskelerini '192.168.1.%' Veya '192.168.1.0/255.255.255.0' ile belirtebilirsiniz, ancak alt ağ her zaman tam sekizli olmalıdır. bkz. https://mariadb.com/kb/en/create-user/#host-name-component . Sonuç olarak, bir spesifikasyon yolu ile diğeri arasındaki işlevsellik aynıdır.

Örneğin, '192.168.1.0/255.255.255.128' tam bir sekizli sınırında olmadığı için çalışmayacaktır.

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.