Uzak MySQL bağlantısını etkinleştir: ERROR 1045 (28000): Kullanıcı için erişim reddedildi


136

Windows XP üzerinde çalışan MySQL 5.1.31.

Gönderen yerel aşağıdaki gibi MySQL sunucusuna (192.168.233.142) Ben root olarak bağlanabilir:

>mysql --host=192.168.233.142 --user=root --password=redacted

Bir itibaren uzaktan makineye (192.168.233.163), ben mysql portu açık olduğunu görebilirsiniz:

# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).

Ancak uzak makineden mysql'e bağlanmaya çalışırken , şunları alıyorum:

# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)

Mysql.user içinde sadece 2 giriş var:

Host         User     Password
--------------------------------------
localhost    root     *blahblahblah
%            root     [same as above]

Uzaktan erişimi etkinleştirmek için daha ne yapmam gerekir?

DÜZENLE

Aşağıdaki Paulo tarafından önerildiği gibi,% için mysql.user girdisini IP'ye özel bir girişle değiştirmeyi denedim, bu yüzden kullanıcı tablom şimdi şu şekilde görünüyor:

Host             User     Password
------------------------------------------
localhost        root     *blahblahblah
192.168.233.163  root     [same as above]

Daha sonra makineyi yeniden başlattım, ancak sorun devam ediyor.

Yanıtlar:


211

Bunu kök olarak koymalısınız:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;

;

IP erişim sağlamak istediğiniz IP'dir, USERNAME bağlanmak için kullandığınız kullanıcı ve PASSWORD ilgili şifredir.

Herhangi bir IP'den erişime izin vermek istiyorsanız IP'niz %yerine

ve sonra sadece

FLUSH PRIVILEGES;

Veya mysql sunucusunu yeniden başlatın ve hepsi bu.


Yerel bir MySQL istemcisi olmadan bunu yapmanın herhangi bir yolu var mı?
cmcginty

belirli bir ip ayrıcalıkları nasıl kaldırılır?
Umair Ayub

4
stackoverflow.com/a/21151255/470749 Bana da yardımcı oldu çünkü adres adresi ayarımın yorumlanması gerekiyordu. Uzaktan ayrıcalık tanımak işe yaraması için yeterli değildi.
Ryan

8
Yanıtta açıklanmadı, ancak PASSWORDhesap şifresi ile değiştirin . Sadece değişen yukarıda çalıştı USERNAMEve IPben değiştirdi dek benim için işe yaramadı PASSWORD.
Richard Parnaby-King

Bunu yaptıktan sonra, aşağıdaki cevapta söylenenleri de takip edin: stackoverflow.com/a/21151255/445438
budhajeewa

85

Bunu yapana kadar uzaktan erişim verdikten sonra aynı hatayı alıyordum:

itibaren /etc/mysql/my.cnf

MySQL'in yeni sürümlerinde dosyanın konumu /etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

(Bu satırı açıklama: bind-address = 127.0.0.1)

Sonra koş service mysql restart.


6
Veya bunu bind-address = 0.0.0.0 olarak değiştirin
lolski

2
Sadece yorum bind-addressyapmak benim için işe yaramadı. Ya bind-address = 0.0.0.0ya bind-address = <server_ip>çalışır.
chhantyal

58

MySQL sunucusunda varsayılan olarak uzaktan erişim devre dışıdır. Kullanıcıya uzaktan erişim sağlama işlemidir.

  1. Sql bin klasörüne git veya PATH
  2. Root girişiyle mysql -uroot -proot(veya kök şifresi ne olursa olsun) giriş yapın.
  3. Başarı durumunda alacaksınız mysql>
  4. Bu kullanıcı için hepsine erişim izni verin.

GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';

Burada IP, uzaktan erişime izin vermek %istediğiniz IP adresidir, herhangi bir IP adresi koyarsak uzaktan erişebiliriz.

Misal:

C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin

C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.27 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.25 sec)

Bu başka bir kullanıcı için.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Umarım bu yardımcı olur


Mükemmel detaylar için +1, gerçekten 0 rows affectedbu norm olduğunu görmek için bana yardımcı oldu :) Ayrıca, service mysqld restartsonunda tavsiye edilir. [ mysqldbazen sadece mysql]
Nathan Dortman

#Not: 5.6+ sürümü için, "ayrıcalıkları ver ..." seçeneğini kullanın (ayrıcalıklar olmadan)
Nicke Manarin

21

Paulo'nun yardımı beni çözüme götürdü. Aşağıdakilerin bir kombinasyonuydu:

  • şifre bir dolar işareti içeriyordu
  • Bir Linux kabuğundan bağlanmaya çalışıyordum

Bash kabuk, dolar işaretini bir ortam değişkenine genişletmek için özel bir karakter olarak ele alır , bu yüzden bir ters eğik çizgiden kaçmamız gerekir. Bu arada, dolar işaretinin parolanın son karakteri olduğu durumda bunu yapmak zorunda değiliz .

Örnek olarak, şifreniz "pas $ word" ise, Linux bash'dan aşağıdaki gibi bağlanmalıyız:

# mysql --host=192.168.233.142 --user=root --password=pas\$word

4
Yukarıdakilere ek olarak lütfen /etc/mysql/my.cnf adresini kontrol edin ve yorum bağlama adresi = 127.0.0.1
Buminda

2
Alternatif olarak, $ genişlemesini önlemek için tek tırnak işareti kullanılabilir: mysql --host=192.168.233.142 --user=root --password='pas$word' stackoverflow.com/a/6697781/500942
jalanb

'$' girin. Paha biçilemez. Bir ton teşekkürler !!
Nagendra Kakarla

Bir süre kafamı monitöre çarptıktan sonra bununla karşılaştım ve işe yaradı. Sahiptim ! Değişen şifre, boşaltılan ayrıcalıklar ve geri döndüm. Teşekkürler!
AJM

9

Güvenlik duvarınız var mı? 3306 numaralı bağlantı noktasının açık olduğundan emin olun.

Windows'ta, kurulum sırasında uzak makinelerden erişimi etkinleştirme seçeneğini belirlemediyseniz, varsayılan olarak localhost'tan erişmesine izin verilen mysql kök hesabı oluşturulur.

ana bilgisayar adı olarak '%' ile istenen kullanıcıyı oluşturun veya güncelleyin.

misal :

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

6
"ERROR 1045 (28000) ile sunucu yanıtı: Bir güvenlik duvarı bloğu zaman aşımına uğrarsa erişim reddedildi ..."
Paulo H.

sadece önce göndermek istedim. my bad
Vamsi Krishna B

@Krish - Önerdiğiniz her şey zaten soruda yer alıyor
Mike Chamberlain

5
  1. flush privilegesTekrar deneyin .

  2. Hibeleri yeniden yüklemek için sunucuyu yeniden başlatmayı deneyin.

  3. "192.168.233.163" ana bilgisayarına sahip bir kullanıcı oluşturmayı deneyin. "%" herkese izin vermiyor gibi görünüyor (garip)


Teşekkürler, bunu denedim ama boşuna. Soruyu önerilerinizle güncelledim.
Mike Chamberlain

4
Başka bir kullanıcı oluşturmayı deneyin ve tüm hibeleri ayarlamayı unutmayın: CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;
Paulo H.

4

Benim durumumda cent OS'de uzak bir mysql sunucusuna bağlanmaya çalışıyordum. Birçok çözümden geçtikten sonra (tüm ayrıcalıkları vermek, ip bağlantılarını kaldırmak, ağ oluşturmayı sağlamak) sorun hala çözülmüyordu.

Anlaşıldığı gibi, çeşitli çözümlere bakarken, iptables ile karşılaştım, bu da mysql portunun 3306 bağlantı kabul etmediğini fark etmemi sağladı.

İşte bu sorunu nasıl kontrol ettiğim ve çözdüğüm hakkında küçük bir not.

  • Bağlantı noktasının bağlantıları kabul edip etmediğini kontrol etme:

    telnet (mysql sunucusu ip) [portNo]

  • Bağlantı noktasında bağlantılara izin vermek için ip tablo kuralı ekleniyor:

    iptables -A GİRİŞ -i eth0 -p tcp -m tcp --port 3306 -j KABUL

  • Üretim ortamı için bunu tavsiye etmem, ancak iptables'larınız düzgün yapılandırılmamışsa, kuralları eklemek sorunu çözmeyebilir. Bu durumda aşağıdakiler yapılmalıdır:

    hizmet iptables dur

Bu yardımcı olur umarım.


3

Dinamik ip kullanıyorsanız, 192.168.2'ye% erişim izni verin, bu yüzden şimdi her seferinde ip adresinize erişim verme konusunda endişelenmenize gerek yok.


1

Amazon EC2 Linux örneğim için MYSQL'e uzaktan giriş yapmakla uğraşıyordum. Çözüm, güvenlik grubumun IP adresimi (veya herhangi bir yer için 0.0.0.0/0) içermesi için MySQL bağlantı noktası 3306 için bir gelen kural içerdiğinden emin olmak oldu. Bu kuralı ekler eklemez hemen uzaktan bağlanabilirim.


1

Mysql config dosyası için yeni konum

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


0

Kullanıcı / ana bilgisayar kombinasyonu parola olmadan oluşturulmuş olabilir.

Varolan bir kullanıcı için yeni bir ana bilgisayar eklerken (GUI uygulaması kullanarak), mevcut şifrenin yeni kullanıcı / ana bilgisayar kombinasyonu için de kullanılacağını varsayıyordum.

İle giriş yapabilirim

mysql -u username -p PASSWORD

yerel olarak, ancak IPADDRESS ile değil

mysql -u --host=HOST -p PASSWORD

(Aslında bir şifre kullanmadan IPADDRESS adresinden giriş yapabilirim)

mysql -u --host=HOST

İzin verilen şifreyi ayarlama:

set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';

1
Teşekkürler, Mysql sunucuma uzaktan bağlanmaya çalışırken çok zaman harcadım ve bu hat çok yardımcı oldu. Kullanıcının parolasını ayarlarken, ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal numberbeni bu makaleye yönlendiren hatayı aldım : knowmysql.blogspot.com/2013/09/… Bu adımları izledikten sonra nihayet sunucuya bağlanabilirim.
Andy Forceno
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.