herhangi bir IP adresinden MySQL veritabanına uzaktan erişim sağlama


280

Bu komutun farkındayım:

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

Ama sonra bu uzak MySQL veritabanına erişmek için sadece belirli bir IP adresi vermeme izin veriyor. Herhangi bir uzak ana bilgisayarın bu MySQL veritabanına erişebilmesi için ne yapmam gerekir? Bunu nasıl yaparım? Temelde bu veritabanını herkesin erişebilmesi için halka açıyorum.


1
Bunu yapmadan önce güvenlikle ilgili sonuçları göz önünde bulundurun: security.stackexchange.com/questions/63881/…
e18r

7
her sistem bir üretim sistemi değildir. bazı insanlar bunu geliştirmek için buna ihtiyaç duyarlar.
Conrad Jones

Yanıtlar:


272
TO 'user'@'%'

% bir joker karakterdir - ihtiyacınız varsa '%.domain.com'veya bunu yapabilirsiniz '%.123.123.123'.


@kristopolous Buna neden olabilecek birçok şey var. Bu komut uzaktan erişim ile ilgilidir (iki farklı makine). Yaptığınız şey bu değilse, bu doğru komut değildir. Hala doğru bir parola ve diğer şeylere ihtiyacınız var.
Ariel

11
"Yıkama ayrıcalıkları" kullanmanız gerekir; değişikliklerin etkili olması için
Didier Sampaolo

Aynı işletim sistemi örneğinde (örneğin geliştirme makineniz) çalışan bir db örneğine bağlanma hilesi, -h my_machine_nameparametreyi iletmektir. Bu, istemciyi sizi tanımlamak 'user'@my_machine_name.example.comyerine kandırır 'user'@localhost. Bu şekilde, hem localhostağ erişimi için hem de ikili hesaplar ve hibeler oluşturmanız ve sürdürmeniz gerekmez . Ve tabii ki, emin olmak mysqldbağlıdır 0.0.0.0vs 127.0.0.1.
Charlie Reitzel

173

Uzaktan Erişimi Etkinleştir (Hibe) Ana Sayfa / Eğiticiler / Mysql / Uzaktan Erişimi Etkinleştir (Hibe) mysql sunucunuza uzak makineden bağlanmayı denerseniz ve aşağıdaki gibi bir hatayla karşılaşırsanız, bu makale tam size göre.

HATA 1130 (HY000): '1.2.3.4' ana bilgisayarının bu MySQL sunucusuna bağlanmasına izin verilmiyor

MySQL yapılandırmasını değiştir

Mysql config dosyasını düzenlemeye başlayın

vim /etc/mysql/my.cnf

Aşağıdaki satırları yorumlayın.

#bind-address           = 127.0.0.1
#skip-networking

Atlama ağı hattını bulamazsanız ekleyin ve yorum yapın.

MySQL sunucusunu yeniden başlatın.

~ /etc/init.d/mysql restart

GRANT ayrıcalığını değiştir

Yukarıdaki değişiklikten sonra bile uzaktan erişim veya erişim elde edemediğinizi ancak tüm veritabanlarına erişemediğinizi görmek sizi şaşırtabilir.

Varsayılan olarak, kullandığınız mysql kullanıcı adı ve parolasının yerel olarak mysql sunucusuna erişmesine izin verilir. Bu yüzden ayrıcalığı güncellemeniz gerekiyor.

Tüm makinelerden erişmek için aşağıdaki gibi bir komut çalıştırın. (Değiştirin USERNAMEve PASSWORDkimlik bilgilerinizle.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Belirli bir IP'den erişim vermek için aşağıdaki gibi bir komut çalıştırın. (Değiştirin USERNAMEve PASSWORDkimlik bilgilerinizle.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

1.2.3.4'ü IP'nizle değiştirebilirsiniz. Birden çok IP'den erişim vermek için yukarıdaki komutu defalarca çalıştırabilirsiniz.

Ayrıca ayrı bir USERNAME&PASSWORD uzaktan erişim için .

Nihai sonucu aşağıdaki yollarla kontrol edebilirsiniz:

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

Son olarak, şunları da çalıştırmanız gerekebilir:

mysql> FLUSH PRIVILEGES;

Test bağlantısı

Terminal / komut satırından:

mysql -h HOST -u USERNAME -pPASSWORD

Bir mysql kabuğu alırsanız, show veritabanlarını çalıştırmayı unutmayın; uzak makinelerden doğru ayrıcalıklara sahip olup olmadığınızı kontrol etmek için.

Bonus İpucu: Erişimi İptal Et

Bir kullanıcıya yanlışlıkla erişim izni verirseniz, iptal etme seçeneğinin kullanışlı olması daha iyidir.

Aşağıda, tüm makinelerden USERNAME için tüm seçenekler iptal edilecektir:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.

REVOKE komutunu çalıştırdıktan sonra KULLANIM ayrıcalığı görürseniz, sorun değil. Hiç bir ayrıcalık kadar iyidir. İptal edilip edilemeyeceğinden emin değilim.


7
Parçayı yorumlamak /etc/mysql/mysql.conf.d/mysqld.cnfyerine dosyayı değiştirmek zorunda olduğumu unutmayın . Satırı eksik ve ekleme ve çizgi yorumlamaya etkisi olmamalıdır. /etc/mysql/my.cnfbind-address#skip-networking
Pawan

1
MariaDB 10.1.26'da yapılandırma dosyası/etc/mysql/mariadb.conf.d/50-server.cnf
Kwadz

Yukarıdakilerin tümünü yaptıysanız ve hala bağlanamıyorsanız, güvenlik duvarı ayarlarınızı kontrol edin, bağlantı noktasını 3306veya kurmuş olduğunuz herhangi bir bağlantı noktasını kontrol ediyor olabilir
avn

37

Yukarıdaki adımın tamamlandığını ve MySql portuna 3306 uzaktan erişilebildiğini varsayarak; MySQL yapılandırma dosyasındaki genel IP adresini bağlamayı unutmayın.

Örneğin ubuntu sunucumda:

#nano /etc/mysql/my.cnf

Dosyada, [mysqld] bölüm bloğunu arayın ve yeni bağlama adresini ekleyin, bu örnekte 192.168.0.116'dır. Böyle bir şey olurdu

......    
.....    
# 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    
bind-address        = 192.168.0.116

.....    
......

dilerseniz localhost (127.0.0.1) bağlamasını kaldırabilirsiniz, ancak daha sonra yerel makinedeki sunucuya erişmek için özel olarak bir IP adresi vermeniz gerekir.

Sonra son adım MySql sunucusunu yeniden başlatmaktır (ubuntu üzerinde)

stop mysql

start mysql

veya #/etc/init.d/mysql restart diğer sistemler için

Artık MySQL veri tabanına uzaktan erişim:

mysql -u username -h 192.168.0.116 -p

/etc/init.d/mysql reloadyeterli
Lorenz Lo Sauer

Sadece bunu yaptım ve mysql sunucusuna uzaktan bağlanamadım. Daha sonra bağlanma adreslerini yorumlamayı denedim ve işe yaradı. Ayrıca ana bilgisayar belirtmeden sunucuya mysql -u <user> -p ile giriş yapmayı denedim ve işe yaradı, bu yüzden "eğer seçerseniz th localhost (127.0.0.1) bağlamayı kaldırabilirsiniz, ama sonra özellikle yerel makinedeki sunucuya erişmek için bir IP adresi verin. " Doğru değil. (Ubuntu 12.04 LTS sunucusu mysql Ver 14.14 Dağıtım 5.5.34)
Programcı

5
bind-addressYönerge IP adresini mysql belirlerse sunucu dinler üzerine; sunucunun bağlantı kabul ettiği IP adreslerini değil .
GoZoner

1
Her adımı uyguladıktan sonra çalışmaz. bind-addressLocalhost veya remotehost adresi hakkında yorum yaparken bir hata alıyorum . mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
baermathias

192.168.0.116 yerine abc.abc:1234 gibi adres sağlamak mümkün müdür?
bielas

26

Bununla uğraşan herkes için, ayrıcalıkları nasıl vermeliyim, umarım birine yardım eder

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';

Belirtildiği gibi %bir joker karakterdir ve bu herhangi bir IP adresinin veritabanınıza bağlanmasına izin verir. Burada yaptığım varsayım, bağlandığınızda, kullanıcı adınız root(varsayılan olsa da) olacaktır. Kök şifresini girin ve hazırsınız. 'Kullanıcı kökü çevresinde tek tırnak ( ) olmadığını unutmayın .


Tek tırnakları kullanıcıdan kaldırmak neden önemlidir? Bu neden diğer cevaplardan (ve kılavuzdan) farklıdır?
DMCoding

26

Localhost üzerinden bağlantıları etkinleştirmek için yapılandırma dosyası değişiklikleri gerekir.

Uzak IP'ler üzerinden bağlanmak için, "root" kullanıcısı olarak oturum açın ve aşağıdaki sorguları mysql'de çalıştırın.

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;

Bu, yerel ana makineden ve uzak IP'lerden erişilebilen yeni bir kullanıcı oluşturur.

Ayrıca /etc/mysql/my.cnf dosyasında bulunan my.cnf dosyanızdan aşağıdaki satırı da yorumlayın

bind-address = 127.0.0.1

MySQL'inizi kullanarak yeniden başlatın

sudo service mysql restart

Artık MySQL'inize uzaktan bağlanabilmelisiniz.


2
Bu soruya cevap vermiyor.
CHarris

1
@ChristopheHarris neden böyle hissediyorsun? Bu sorunun cevabı, MySQL'de o kullanıcıyı kullanarak DB'ye hem localhost hem de uzaktan erişime izin veren yeni bir kullanıcı oluşturma konusunda adım adım talimatlar veriyor. Plesae açıklayabilir misin?
harishannam

1
Benim için çalışmıyor. Hala aynı hata var. Kök ya da yeni bir kullanıcı ile denesem de: 'xxx.xxx.xxx.xxx' adresindeki MySQL sunucusuna bağlanılamıyor ([Errno 61] Bağlantı reddedildi)
baermathias

21

Bu komutu kullanın:

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

Sonra:

FLUSH PRIVILEGES; 

Sonra "/etc/mysql/mysql.conf.d/mysqld.cnf" dosyasında aşağıdaki satırı not edin (gerekli!):

bind-address = 127.0.0.1 

Benim için çalışıyor!


Çok iyi biri. Hibe önemli. Değilse, gibi talepler için çok hatayour-password-does-not-satisfy-the-current-policy-requirements
Alejandro Teixeira Muñoz

21

Herhangi bir IP adresinden kullanıcıyla bağlantı kurabilmek için aşağıdakileri yapın:

Mysql sunucusunun uzak bağlantıları kabul etmesine izin ver. Bu açık mysqld.conf dosyası için:

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

"Bind-address" ile başlayan satırı arayın ve değerini 0.0.0.0 olarak ayarlayın

bind-address                    = 0.0.0.0

ve son olarak dosyayı kaydedin.

Not: MySQL 8+ çalıştırıyorsanız, bind-addressyönerge mysqld.cnfvarsayılan olarak dosyada bulunmaz . Bu durumda, yönergeyi dosyanın altına ekleyin /etc/mysql/mysql.conf.d/mysqld.cnf.

Şimdi mysql sunucusunu yeniden başlatın systemdveya eski servicekomutunu kullanın. Bu işletim sisteminize bağlıdır:

sudo systemctl restart mysql # for ubuntu    
sudo systemctl restart mysqld.service # for debian

Son olarak, mysql sunucusu artık uzak bağlantıları kabul edebiliyor.

Şimdi bir kullanıcı oluşturmamız ve ona izin vermemiz gerekiyor, böylece bu kullanıcıyla uzaktan oturum açabiliyoruz.

MySQL veritabanına root veya root yetkisine sahip başka herhangi bir kullanıcı olarak bağlanın.

mysql -u root -p

şimdi hem localhost hem de '%' joker karakterinde istediğiniz kullanıcıyı oluşturun ve tüm DB'lere bu şekilde izin verin.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

Sonra,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

Ve son olarak ayrıcalıkları yıkamayı unutma

FLUSH PRIVILEGES;

Not: Veritabanı sunucunuzda bir güvenlik duvarı yapılandırdıysanız, 3306MySQL'e trafiğe izin vermek için bağlantı noktası MySQL'in varsayılan bağlantı noktasını da açmanız gerekir .

Bu yardımcı olur umarım ;)


2
sudo systemctl restart mysqld.service debian için, sudo systemctl restart mysql.service için kullanmak zorunda ubuntu
ani0904071

Cevabımı güncelledim ve her iki dağıtım için mysql restart komutunu ekledim. thanks @ ani0904071
Imtiaz Shakil Siddique

17

Aşağıdakileri çalıştırın:

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
mysql> FLUSH PRIVILEGES;     
mysql> exit

Ardından belirttiğiniz IP adresinden bir bağlantı deneyin:

mysql -h address-of-remove-server -u root -p   

Bağlanabilmeniz gerekir.




7

Veritabanı Mysql sunucusu 8'e uzaktan erişmek için:

CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';

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

FLUSH PRIVILEGES;

5
  • Yönetici kullanıcı kullanarak MYSQL'i BAŞLAT
    • mysql -u admin-user -p (İSTEMEDE ŞİFREYİ GİRİN)
  • Yeni bir kullanıcı oluşturun:
    • KULLANICI OLUŞTURUN 'newuser' @ '%' 'şifre' İLE TANIMLANMIŞ; (% -> anyhost)
  • Hibe İmtiyazları:
    • HİBE SEÇ, SİL, EKLE, db_name ÜZERİNDE GÜNCELLEME. * 'Newuser' @ '%';
    • SIVA AYRICALIKLARI;

EC2 yönetim ortamı çalıştırıyorsanız, güvenlik kurallarına gelen kuralları MYSQL / Aurura ile eklemeyi unutmayın.


5

Dosyayı düzenle:

/etc/mysql/percona-server.cnf

Aşağıdaki kodu dosyaya ekleyin.

[mysqld] bind-address = 0.0.0.0

Uzaktan erişim için kullanıcı oluşturun.

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';   
mysql> FLUSH PRIVILEGES;    
mysql> exit

Tüm linux sunucu işleri,

MSWin c: \ İnsatallation konumunu bul \ dosya yolu için


[mysqld] dosya eklemeniz gerekiyor, aksi takdirde düzgün çalışmıyor
Tejas Tank

3

Kullanıcıyı,

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

Sonra şuraya git

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfve çizgiyi değiştirmek bind-address = 127.0.0.1içinbind-address = 0.0.0.0

Bundan sonra bu veritabanına herhangi bir IP üzerinden bağlanabilirsiniz.


3

mysql consoleAşağıdaki komutu açın ve aşağıdaki komutu yürütün (veritabanı adınızı, kullanıcı adınızı ve şifrenizi girin):

Veritabanınız adına TÜMÜNÜ VERİN.

Sonra Yürüt:

SIVA AYRICALIKLARI;

Komut satırını açın ve /etc/mysql/mysql.conf.d/mysqld.cnfherhangi bir düzenleyici kullanarak dosyayı açın.root privileges .

Örneğin:

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

Sonra aşağıdaki satırı yorumlayın:

bağlama adresi = 127.0.0.1

Komut kullanarak değişiklikleri yansıtmak için mysql'yi yeniden başlatın:

sudo service mysql restart

Zevk almak ;)


2

Mysql yapılandırma dosyasını değiştirmeniz gerekir:

Mysql config dosyasını düzenlemeye başlayın

vim /etc/mysql/my.cnf

Ekle:

bind-address = 0.0.0.0

0

CPanel gibi web sitesi panellerinde %, MySQL veritabanınıza erişmek için izin verilen ana bilgisayar adlarına tek (yüzde işareti) ekleyebilirsiniz .

Tek bir ekleyerek %veritabanınıza masaüstü uygulamalarından bile herhangi bir IP veya web sitesinden erişebilirsiniz.


lütfen düz bir sorgu sunulduğunda cPanel gibi bir şeye başvurmayın, bu asla başkaları için çalışma sonucu göstermez
Tobias Hagenbeek

@TobiasHagenbeek Geri bildiriminiz için teşekkür ederiz. Bu yöntem / hile benim tarafımdan icat edilmedi (İnternette yaygındır). Ama bu yöntemin test edicilerinden biriyim ve bunu en kolay ve çalışan yöntem olarak buldum, bu yüzden buraya gönderdim. Bu yöntemde ihmal edilebilecek bazı güvenlik riskleri olduğunu biliyorum.
Muhammed Saqib

0

Örneğin CentOS'umda

sudo gedit /etc/mysql/my.cnf

aşağıdaki satırları yorumlayın

# bağlama adresi = 127.0.0.1

sonra

sudo hizmet mysqld yeniden başlatma


0

Veritabanınıza herhangi bir IP adresinden uzaktan erişim izni vermek istiyorsanız, mysql komutunu ve bundan sonra aşağıdaki komutu çalıştırın.

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

0

Ubuntu'da işe yarayan şey kullanıcıya tüm ayrıcalıkları veriyor:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;

ve bağlanma adresini şu konumda ayarlamak /etc/mysql/mysql.conf.d/mysqld.cnf:

bind-address            = 0.0.0.0

mysql arka plan programı yeniden başlatıldığında:

service mysql restart

-7

/Etc/my.cnf dosyasını düzenleyerek tüm güvenliği devre dışı bırakabilirsiniz:

skip-grant-tables

bu tüm şifre gereksinimlerini ortadan kaldırır
kristopolous

5
Bu seçeneğin bir üretim ortamında etkinleştirilmesinin tavsiye edilmediğini unutmayın, çünkü bu işlem kimsenin şifre olmadan bağlanmasına izin verir!
AStopher

ancak, bu bir geliştirme ortamı için idealdir
DMCoding

Bu, kullanıcıların parola kullanmadan veritabanınızı hacklemesini sağlar.
MilkyWay90

@DanielJames geliştirme ortamı için bile korkunç bir fikir
Dragas
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.