SSH tüneli üzerinden bağlanırken MySQL erişimi engellendi


12

Aylardır yerel test sunucumuzda çalışan MySQL örneğine bir SSH tüneli üzerinden sorunsuz bir şekilde bağlanıyorum. Aniden, düşünebileceğim hiçbir değişiklik olmadan, sunucu Sequel Pro'nun girişindeki günlüğü hata ile reddetmeye başladı:

Erişim engellendiği için 127.0.0.1 ana bilgisayarına bağlanılamıyor.

Kullanıcı adınızı ve şifrenizi tekrar kontrol edin ve mevcut konumunuzdan erişime izin verildiğinden emin olun.

MySQL: 'root' @ 'localhost' kullanıcısı için erişim reddedildi (şifre kullanarak: YES)

SSH tünelinden değil, doğrudan sunucuya SSH üzerinden bağlandığında terminalden oturum açabiliyorum. Sorun Sequel Pro ya da sadece kendime özgü değil, MySQL Workbench aracılığıyla ofisteki diğer kişilerle bağlanırken aynı hatayı alıyorum. Şifreyi mysqladminsadece akıl sağlığı için sıfırladım, kesinlikle sorun değil.

Ben daha içine bakmaya başladığımda hata Sequel Pro girilen "127.0.0.1" yerine, sunucu "localhost" olarak bildiriyor olduğunu fark ettim. Bir arkadaşım bunun muhtemelen sadece hatalı hata işlemeyi önerdi, ancak MySQL'de localhost ve 127.0.0.1 arasındaki önemli fark göz önüne alındığında garip görünüyor.

Tünel oluşturma sorununu çözme girişiminde, doğrudan bağlanabilmek için root @% 'a erişim izni verdim. Bu çoğunlukla çalışır, tablo verilerini görüntüleyebilir, yeni veritabanları oluşturabilirim vb. Tek sorun kullanıcı oluşturmaya geldiğimde hatayı alıyorum:

'Root' @ '%' kullanıcısı için erişim reddedildi (şifre kullanarak: YES)

Garip bir şekilde kullanıcı aslında yaratılmış, bence bu sadece hibe ile ilgili bir sorun. Yine de, terminalden root olarak giriş yaptığımda her şeyi yapabilirim.

Herkes neden tünel bağlantılarının ve (muhtemelen) hibe komutlarının erişim reddedildi hatasını aldığına ışık tutmaya yardımcı olabilir mi?

Referans olarak MySQ, Homebrew üzerinden bir MAC OS X Server makinesine yüklenmiş olan varsayılan ayarlara sahip 5.6.16 sürümüdür.

Güncelleme

Kökte şu anda erişim izni verilen ana bilgisayarların listesi:

mysql> select host,user from mysql.user where user='root';
+----------------+------+
| host           | user |
+----------------+------+
| %              | root |
| 127.0.0.1      | root |
| ::1            | root |
| localhost      | root |
+----------------+------+
4 rows in set (0.00 sec)

Anladığım kadarıyla, ilk satır ("%") diğerlerini gereksiz kılmalı mı?

Güncelleme 2

Hibe sorunu düzeltildi; root @% kullanıcısı, with grant optionsonunda ekstra olan tüm ayrıcalıklara sahip değildir , bu nedenle hibe dışında her şeyi yapabilir. Yine de SSH tünellerinin neden reddedildiğini bilmek isterim.


"%" hesabını yapmadan önce, "127.0.0.1" ve "localhost" u yaptınız ve her ikisi de çalışmadı, doğru mu?
Sverre

localhost yalnızca gerçekte doğru ana bilgisayardaysanız çalışır, bu nedenle teoride yalnızca 127.0.0.1 (localhost'a eşdeğer ağ) bir ssh tüneli üzerinde çalışmalıdır. en az OS gibi unix.
Sverre

Yanıtlar:


18

MySQL'de, localhostanahtar kelime MySQL soketini kullanarak bağlantı için ayrılmıştır ve 127.0.0.1127.0.0.1'deki MySQL ağ bağlantı noktasına TCP bağlantıları için ip adresini kullanmalısınız . Sunucu hem spesifik olarak gelen kullanıcılara ayrıcalık tanımak gerektiğini bu araçlar 127.0.0.1, ve müşteri kullanmalıdır -h 127.0.0.1yerine yerel bir sokete bağlantı tüneli geçmesi.

SSH bağlantı noktası yönlendirmesini kullanarak erişmenize izin vermek için aşağıdakilere ihtiyacınız vardır:

GRANT SELECT ON *.* TO user@`127.0.0.1`

ve sonra koş

FLUSH PRIVILEGES;

ve muhtemelen

FLUSH QUERY CACHE;

Hala çalışmıyorsa, sunucu işlemini yeniden başlatın.

127.0.0.1 hata iletilerinde ters DNS araması yapıldıktan sonra localhosthata ayıklamayı zorlaştırır.

Gibi manuel bunu anlatır:

Unix'te MySQL programları, ana bilgisayar adını localhost'a özel olarak, diğer ağ tabanlı programlara kıyasla beklediğinizden farklı bir şekilde davranır. Localhost'a bağlantılar için, MySQL programları bir Unix soket dosyası kullanarak yerel sunucuya bağlanmaya çalışır. Bu, bir bağlantı noktası numarası belirtmek için bir - -portveya -Pseçenek belirtilse bile oluşur . İstemcinin yerel sunucuya TCP / IP bağlantısı yapmasını sağlamak için --hostveya -hana bilgisayar adı değerini 127.0.0.1veya yerel sunucunun IP adresini veya adını belirtmek için kullanın . --protocol=TCPSeçeneği kullanarak bağlantı protokolünü localhost için bile açıkça belirtebilirsiniz . Örneğin:

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP

Bu --protocolseçenek, diğer seçenekler normalde başka bir protokol için varsayılan olsa bile belirli bir bağlantı türü kurmanızı sağlar.


2
Ah! O zaman 127.0.0.1 görmeyi beklediğimde neden hata mesajında ​​localhost gördüğümü açıklıyor. Asla daha az, kök kullanıcıya tüm ayrıcalıklar @ 127.0.0.1 verildi, ancak yine de bir SSH tünelinden bağlanırken erişim reddedildi hatası alıyorum. Koştuğum tam açıklama:grant all on *.* to 'root'@'127.0.0.1' with grant option;
Adam

Bu sorunu yaşıyorum ve gerçekten ana vs soket sorunu olduğu açıktır. ssh -h 127.0.0.1 -u root -pSunucuya uzaktan yazdığımda bağlantı da reddediliyor.
fuzzyTew

-h 127.0.0.1Sunucuda başarısız olan bağlantıları
mysql'i yeniden başlatarak çözdüm

İşte başlıyoruz. 1. Sunucu @ 127.0.0.1'e hibe vermelidir. Sunucuyu yeniden başlatana kadar bu benim için olmadı. 2. Yerel bağlantı yerine tünel kullanılması için yerel bağlantı localhost değil , 127.0.0.1 olmalıdır .
fuzzyTew

1

Geçmişte ssh tünelleriyle gördüm, "localhost" a "Tümünü ver" ve "127.0.0.1" e hibe verme arasında bir fark olduğunu gördüm.


ya da tam tersi, sizin durumunuz gibi görünüyor
Sverre

Teşekkürler, kök kök verilen bir listesini eklemek için soruyu güncelledim. Ben Sequel Pro MySQL sunucusu olarak "127.0.0.1" girmesine rağmen, MySQL hatası "localhost" olarak bildiriyor garip buldum. Bu sorunun bir sorun olduğunu düşünmüyorum.
Adam

tüm farklı kullanıcılarda şifreleriniz var mı? ayrıca tünel üzerinden mysql'e bağlandığınızda, kullandığınız gerçek sözdizimi nedir?
Sverre

mysql kurulumunuzda Kök kullanıcı üzerinde herhangi bir kısıtlama var mı?
Sverre

Tüm kök parolaların aynı olduğundan, ancak neşe duymadığından emin olmak için grantifadeleri yeniden çalıştırın identified by ...
Adam

0

Tüneli oluşturmak için Sequel'i kullanmak yerine, tüneli kendiniz ne yaratırsınız?

ssh -Cc balon balığı -Nf -vv -L3306: localhost: 3306 sshuser @ domain

Sonra 127.0.0.1:3306 Sequel ile bağlanın Bağlayabilirsiniz? Terminalinizde (veya ssh istemci günlüklerinde) bir şey görünüyor mu?

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.