Kullanıcı için mysql sunucusuna uzaktan erişim izinleri nasıl verilir?


118

Ben yaparsam SHOW GRANTSbenim MySQL veritabanında alıyorum

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION

Yanılmıyorsam, root@localhostkullanıcının rootsunucuya yalnızca adresinden erişebileceği anlamına gelir localhost. MySQL'e rootbu mysql sunucusuna diğer tüm makinelerden (aynı ağdaki) erişim izni vermesini nasıl söyleyebilirim ?


6
Basit bir değişiklik localhost, %genel ağa kök erişimi sağlayacaktır. Unutmayınflush privileges;

6
Root @% eklemek sizi çok fazla riske maruz bırakır ve yapılmamalıdır. Bunun eski bir yazı olduğunu biliyorum ama o uyarı burada olmalı. Kök hesap, saldırganlar tarafından hedeflenen ilk hesaptır ve root @ '%', kök kullanıcının MySQL hesabınıza istediği her yerden bağlanabileceği anlamına gelir. Yorumlarda ele alınacak çok şey var, ancak olabildiğince çok sayıda kullanıcıyı @ '%' kaldırmaya çalışmalısınız ve bu konuda bildirilenlerin çok sınırlı ayrıcalıkları olmalıdır. Ne olursa olsun, kesinlikle root @ '%' eklememelisiniz ve uygulamalarınız o hesabın da mevcut olmasını beklememelidir.
Damon

Ayrıca
kullanıcı

Hey millet, bu komutun PASSWORD dizesini kaldırmalısınız ... bu bir hataya neden oluyor ... sadece IDENTIFIED BY ile bitirin ve ardından şifrenin kendisi.
Mário de Sá Vera

Yanıtlar:


143

Bu, aşağıdaki herhangi bir makineden aynı parolayla root erişimi sağlar *.example.com:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

Ad çözümlemesi işe yaramazsa, IP veya alt ağ yoluyla da erişim izni verebilirsiniz:

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

MySQL GRANTsözdizimi belgeleri.


15
Her ...TO 'root'@'%' IDENTIFIED...yerden erişim vereceğimi varsayıyorum ?
Aufwind

3
Komutu mysql'de çalıştırdım, ancak SHOW GRANTSyine de aynı şeyi gösteriyor ( sorumdaki gibi). Ben bile yaptım FLUSH PRIVILGES. Özlediğim bir şey mi var
Aufwind

@Aufwind dışında başka bir şeye ihtiyacınız olduğunu düşünmezdim FLUSH PRIVILEGES. Oturumu kapatın ve tekrar açın, erişiminiz varsa mysqld hizmetini yeniden başlatın. Ayrıca, yine de aynı olmadığınızı hesaba skip networkingkatmayacağından , hattınızda etkin olmadığından emin olun . my.cnfSHOW GRANTS
Michael Berkowski

@Aufwind Aksi takdirde, bunun yerine ServerFault.com'a sormanız gerekebilir.
Michael Berkowski

10
Buna IDENTIFIED BY PASSWORD41 basamaklı onaltılık bir sayının eşlik ettiğini unutmayın . IDENTIFIED BY 'password'Parolayı doğrudan eklemek istiyorsanız kullanın .
Rainulf

94

Deneyin:

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

1
Pa55w0rdaptalca görünen şey, bana yapmak istediğiniz şifrenin bu olduğunu söyleme. MySQL'inize giriş yapmaya çalışan herkes için?
2014,

23
Genellikle bir yer tutucuya şifre vermek için kullanılır ve "iyi şifrenizi bu yere yazın" der.
moshe beeri

2
Bu komut, yalnızca güvenliğin önemli olmadığı uygulamalarda (örneğin dev veya QA) kullanmak isteyeceğinize dair olağan uyarı ile birlikte.
einnocent

mac üzerinde çalışmıyorsa, 'root' @ '%' 'yi' root '@' localhost 'veya / etc / hosts adı ile değiştirmeye çalışın, ayrıcalıklar verdiğiniz bilgisayarın adı.
moshe beeri

2
Şunlardan sonra çalıştırmayı unutmayın:FLUSH PRIVILEGES;
dane

44

Önce mysql ve ardından kök kullanıcıya dışarıdan erişilebildiğinden emin olmak için bazı adımlar atmanız gerekir:

  1. Devre dışı skip-networkingolarak my.cnf(diğer bir deyişle: /etc/mysql/my.cnf)

  2. Değerini kontrol bind-addressiçinde my.cnfhiç 's seti ise 127.0.0.1, sen olarak değiştirebilirsiniz 0.0.0.0tüm IP'lerinden erişimine izin vermek ya da bağlanmak istediğiniz ip neyse.

  3. Kök kullanıcıya herhangi bir ipten uzaktan erişim verin (veya bunun yerine ip'inizi belirtin %)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
        IDENTIFIED BY 'your_root_password'
        WITH GRANT OPTION;
    FLUSH PRIVILEGES;`
  4. Mysql hizmetini yeniden başlatın:

    sudo service mysql restart

Ayrıca güvenlik duvarından 3306 mysql bağlantı noktasını açmanız gerekir, aksi takdirde uzak istemciler bağlanmaz
David Okwii

@ Khashayar'dan 2. noktada hızlı bir bildirim: 0.0.0.0 herhangi bir IPv4 adresi anlamına gelir. * HERHANGİ bir adres anlamına gelir, IPv4 veya IPv6.
Gustavo Pinsard

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

*.* = DB.TABLE kullanıcıyı belirli bir veritabanı ve belirli bir tabloyla sınırlayabilirsiniz.

'root'@'%'oluşturduğunuz herhangi bir kullanıcıyla root değiştirebilirsiniz ve% tüm IP'ye izin verir. % .168.1.1 vb. Değiştirerek de kısıtlayabilirsiniz.


Bu çözülmezse, my.cnf veya my.ini'yi de değiştirin ve bu satırları yorumlayın

bind-address = 127.0.0.1için #bind-address = 127.0.0.1
ve
skip-networkinghiç#skip-networking

  • MySQL'i yeniden başlatın ve yukarıdaki adımları tekrarlayın.

Raspberry Pi, altında bağlantı adresi yapılandırmasını buldum \etc\mysql\mariadb.conf.d\50-server.cnf


2
Sadece *.*ve 'user'@'address'kısmını açıklayan cevap . Teşekkürler! :)
Philipp

TÜM açıklanıyor . bilgisayar korsanlarını davet ediyor.
Rick James

bu yüzden açıkladım *. *
Wasim A.

8

Diğerlerinin paylaştığı SQL hibe işlerini yapıyor. Veritabanına hala erişemiyorsanız, bağlantı noktası için bir güvenlik duvarı kısıtlamasına sahip olmanız mümkündür. Bağlantının nasıl açılacağı sunucu türünüze (ve aradaki yönlendiricilere) bağlıdır. 3306 gelen TCP bağlantı noktasını açın ve harici makineler için benzer bir erişim kuralı verin (tümü / alt ağ / tek IP / vb.).



3

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ın verilmesi, ip bağlarının kaldırılması, ağın etkinleştirilmesi) sorunu hala çözülmemişti.

Sonuç olarak, çeşitli çözümlere bakarken, iptables ile karşılaştım, bu da 3306 mysql portunun bağlantıları kabul etmediğini anlamamı sağladı.

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

  • Bağlantı noktasının bağlantıları kabul edip etmediğini kontrol etme:
telnet (mysql sunucusu ip) [portNo]

-Port üzerinde bağlantılara izin vermek için ip tablosu kuralı ekleme:

iptables -Bir GİRİŞ -i eth0 -p tcp -m tcp --dport 3306 -j KABUL

-Bu üretim ortamı için tavsiye edilmez, ancak iptable'larınız düzgün yapılandırılmadıysa, kuralların eklenmesi sorunu yine de çözmeyebilir. Bu durumda aşağıdakiler yapılmalıdır:

hizmet iptables durdur

Bu yardımcı olur umarım.


3

İki adım:

  1. kullanıcıyı joker karakterle ayarla:
    create user 'root'@'%' identified by 'some_characters'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'some_characters' WITH GRANT OPTION

  2. vim /etc/my.cnf
    aşağıdakileri ekleyin:
    bind-address=0.0.0.0

sunucuyu yeniden başlatırsanız, ona bağlanırken herhangi bir sorun yaşamazsınız.


Ardından, "ERROR 1827 (HY000): Şifre karması beklenen formata sahip değil. PASSWORD () fonksiyonu ile doğru şifre algoritmasının kullanılıp kullanılmadığını kontrol edin." Burada neyi yanlış anladığımı açıklayabilir misin?
lampShadesDrifter

2

Mysql 8 ve sonraki sürümlerde, ayrıcalıklar vererek bir kullanıcı ekleyemezsiniz. bu sorgu ile şu anlama gelir:

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

mysql bu hatayı döndürür:

ERROR 1064 (42000): SQL sözdiziminizde bir hata var; 1. satırda 'IDENTIFIED BY' yazılı şifre 'yakınında kullanılacak doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuzu kontrol edin

bu,% domain için bir root kullanıcınız olmadığı anlamına gelir. bu nedenle, önce kullanıcıyı eklemeniz ve ardından aşağıdaki gibi ayrıcalıklar vermeniz gerekir:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'your password';
Query OK, 0 rows affected (0.11 sec)

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

mysql> FLUSH PRIVILEGES;

Parolaları kendi özel parolalarınızla değiştirmeyi unutmayın.


0

Bu benim için çalıştı. Ama önce ben bile etkilemediğini denediğim garip bir sorun vardı. Phpmyadmin sayfasını güncelledim ve bir şekilde çalıştırdım.

Local-xampp-mysql'e erişmeniz gerekiyorsa. Xampp-shell -> komut istemini açmaya gidebilirsiniz.

Sonra mysql -uroot -p --port = 3306 veya mysql -uroot -p (eğer bir şifre ayarlanmışsa). Bundan sonra bu erişimi mysql kabuk sayfasından verebilirsiniz (ayrıca localhost / phpmyadmin'den de çalışabilir).

Biri bu konuyu bulursa ve başlangıç ​​sorunları yaşarsa bunları ekleyin.


0

Ubuntu 18.04

Mysqld'yi kurun ve çalıştığından emin olun ..

Veritabanına gidin ve kök kullanıcıyı kurun:

sudo mysql -u root
SELECT User,Host FROM mysql.user;
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY 'obamathelongleggedmacdaddy';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Mysqld izinlerini düzenleyin ve yeniden başlatın:

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

# edit the line to be this:
bind-address=0.0.0.0

sudo systemctl stop mysql
sudo systemctl start mysql

Başka bir makineden, test edin .. mysqld makinesindeki Obvs portu (3306) test makinesinden bağlantıya izin vermelidir.

mysql -u root -p -h 123.456.789.666

MySql'in tüm ek "güvenliği" güvenliğe hiç yardımcı olmuyor, sadece karmaşıklaştırıyor ve şaşırtıyor, artık gerçekten uzun bir şifre kullandığınız eski günlerde olduğundan daha kolay.

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.