Çözüm MariaDB Harici Erişim Sağlayamamak

Bu konu bir çözümü açıklamaktadır. Herhangi bir çözüm açıklanmadığını düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
6 Ekim 2013
Mesajlar
13.203
Makaleler
44
Çözümler
124
Yer
Sakarya
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
Merhaba arkadaşlar,

Bitirme projem için üzerinde çalışma yürüttüğüm Raspberry Pi Zero cihazıma LEMP kurulumunun ayarlarını yaparken MariaDB kurulumu sonrası yerel makine dışında (yani localhost dışında) MariaDB'de tanımladığım kullanıcıma erişim sağlayamıyordum. Bu soruna hakkında araştırma yaparken ne MariaDB'nin rehber belgelerinde ne Raspberry rehberlerinde ne de internetteki bilinen kaynaklarda bu soruna karşı bir çözüme denk gelemedim. Bugün sorunla ilgili farklı anahtar kelimelerini ararken bir rehber buldum ve rehberdeki ufak bir bilgi notu sorunun kaynağını anlamama sebep oldu. :)

İşte sorunu çözme adımlarımız:
  • Önce MariaDB'yi sistemimize aşağıdaki komut kuralım.
    sudo apt install mariadb-server -y
  • Ardından MariaDB'nin ilk çalıştırma ayarlarını aşağıdaki komut ile çalıştırıp çıkan adımları kendinize uyan şekilde tamamlayın.
    sudo mariadb-secure-installation
  • MariaDB kurulumumuzu tamamladığımıza göre artık MariaDB yöneticisini çalıştırabiliriz.
    sudo mariadb

    MariaDB'nin konsol istemcisine artık "root" olarak giriş yaptık. Şimdi kendimize yeni bir SQL kullanıcısı oluşturalım. Zira her işimize "root" kullanıcısı ile devam edemeyiz. :) Aşağıdaki komutu MariaDB'nin istemcisine girelim.
    CREATE USER 'kullanici_adi'@'%' IDENTIFIED BY 'kullanici_sifresi';
    Artık bu komut ile global erişime sahip "kullanici_adi" adında ve "kullanici_sifresi" şifreli bir kullanıcı hesabı açtık. Global erişimi kullanıcı adınından sonra gelen @'%' etiketi ile göstermiş oluyoruz. @ bize burada hangi alan adı aralığında olduğunu tanımlamamıza yarıyor. '%' ise burada joker karakter işlevi görüyor ve gelen her türlü isteği kabul ediyor.

    Kullanıcı adını oluşturma işlemini gerçekleştirdikten sonra aşağıdaki komut ile yeni tanımladığımız kullanıcıya erişim izni veriyoruz.
    UPDATE mysql.user SET grant_priv='Y', super_priv='Y' WHERE User='kullanici_adi'; FLUSH PRIVILEGES; GRANT ALL ON veritabani_adi.tablo_adi TO 'kullanici_adi'@'%';
    grant.priv ve super.priv ile ilgili kullanıcıya süper kullanıcı yetkisi veriyoruz. Ardından gelen Flush Privileges komutu ile veritabanı yazılımının yetkili kullanıcı tablosunu güncellemesini sağlıyoruz. Grant All on kısmı ile ise belirli veritabanlarına erişim izni veriyoruz. Burada dikkat edilmesi gereken nokta veritabani_adi.tablo_adi kısmıdır. Bu kısımda sadece kullanacağımız veritabanlarında işlem yapmasını sağlayabileceğimiz gibi *.* gibi joker tanımlama ile tüm veritabanlarına ve içerilerindeki tablolara veya veritabani_adi.* gibi bir joker tanımlama ile belirlediğimiz veritabanına ait tüm tablolara erişim ve kullanım yetkisi vermekteyiz.
  • Tüm bu kullanıcı oluşturma, izinleri verme ve erişilebilir veritabanlarını tanımlama işlemlerinden sonra exit yazarak MariaDB arayüzünden çıkış yapabiliriz. Şimdi sırada MariaDB'nin sunucu konfigürasyonunu güncellemek kaldı.
  • Bunun için aşağıdaki komutu konsola yazıyoruz.
    sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
  • Önümüze nano metin düzenleyicisi geldikten sonra aşağıdaki gibi bir konfigürasyon dosyası görmemiz gerekli.
    1607371547481.png

    Şimdi yapmamız gereken sadece 2 adet satırı düzenlemek.
    #port 3306 yazan satırı port 3306 şeklinde düzenliyoruz. bind-address 127.0.0.1 yazan satırı ise bind-address 0.0.0.0 şeklinde düzenliyoruz. Son halinde dosyamız aşağıdaki gibi gözükmeli:
    1607371916611.png

    Resimdeki gibi gözüküyorsa eğer dosyamız sırasıyla Ctrl + S ve Ctrl + X kombinasyonlarını kullanıp dosyamızı kaydedelim ve nano'dan çıkış yapalım.
  • Evet, artık geriye kalan tek işlem MariaDB işlemlerini yeniden başlatmak ve sunucumuza bağlanmaya çalışmak. Bunun için aşağıdaki komutları sırasıyla giriyoruz.
    sudo systemctl restart mysql.service
    sudo systemctl restart mariadb.service
    Hizmetleri yeniden başlattığımıza göre son bir kontrol olarak 3306 (varsayılan MySQL/MariaDB veritabanı portunu) kontrol edelim. Bunun için sudo netstat -anp | grep 3306 komutunu çalıştıralım. Bize aşağıdaki gibi bir çıktı vermesi gerekli.
    tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN [işlemin_pid_numarası]/mysqld
    1607372315764.png
  • Son olarak herhangi bir MariaDB destekli veritabanı yönetimi yazılımı ile (ben Navicat'ı tercih ediyorum) ile MariaDB sunucumuzun bilgilerini girip bağlantı testini deneyelim.
    1607372676680.png

Ve gördüğünüz gibi hedefimize ulaştık. Artık veritabanımıza yerel makine (localhost) dışında dışarıdan başka bir cihaz ile bağlanabiliyoruz.

Çözümü bulmama yardımcı olan siteyi de şuraya bırakalım: Configure Remote Access to MySQL / MariaDB Databases | Website for Students
 
Merhaba arkadaşlar,

Bitirme projem için üzerinde çalışma yürüttüğüm Raspberry Pi Zero cihazıma LEMP kurulumunun ayarlarını yaparken MariaDB kurulumu sonrası yerel makine dışında (yani localhost dışında) MariaDB'de tanımladığım kullanıcıma erişim sağlayamıyordum. Bu soruna hakkında araştırma yaparken ne MariaDB'nin rehber belgelerinde ne Raspberry rehberlerinde ne de internetteki bilinen kaynaklarda bu soruna karşı bir çözüme denk gelemedim. Bugün sorunla ilgili farklı anahtar kelimelerini ararken bir rehber buldum ve rehberdeki ufak bir bilgi notu sorunun kaynağını anlamama sebep oldu. :)

İşte sorunu çözme adımlarımız:
  • Önce MariaDB'yi sistemimize aşağıdaki komut kuralım.
    sudo apt install mariadb-server -y
  • Ardından MariaDB'nin ilk çalıştırma ayarlarını aşağıdaki komut ile çalıştırıp çıkan adımları kendinize uyan şekilde tamamlayın.
    sudo mariadb-secure-installation
  • MariaDB kurulumumuzu tamamladığımıza göre artık MariaDB yöneticisini çalıştırabiliriz.
    sudo mariadb

    MariaDB'nin konsol istemcisine artık "root" olarak giriş yaptık. Şimdi kendimize yeni bir SQL kullanıcısı oluşturalım. Zira her işimize "root" kullanıcısı ile devam edemeyiz. :) Aşağıdaki komutu MariaDB'nin istemcisine girelim.
    CREATE USER 'kullanici_adi'@'%' IDENTIFIED BY 'kullanici_sifresi';
    Artık bu komut ile global erişime sahip "kullanici_adi" adında ve "kullanici_sifresi" şifreli bir kullanıcı hesabı açtık. Global erişimi kullanıcı adınından sonra gelen @'%' etiketi ile göstermiş oluyoruz. @ bize burada hangi alan adı aralığında olduğunu tanımlamamıza yarıyor. '%' ise burada joker karakter işlevi görüyor ve gelen her türlü isteği kabul ediyor.

    Kullanıcı adını oluşturma işlemini gerçekleştirdikten sonra aşağıdaki komut ile yeni tanımladığımız kullanıcıya erişim izni veriyoruz.
    UPDATE mysql.user SET grant_priv='Y', super_priv='Y' WHERE User='kullanici_adi'; FLUSH PRIVILEGES; GRANT ALL ON veritabani_adi.tablo_adi TO 'kullanici_adi'@'%';
    grant.priv ve super.priv ile ilgili kullanıcıya süper kullanıcı yetkisi veriyoruz. Ardından gelen Flush Privileges komutu ile veritabanı yazılımının yetkili kullanıcı tablosunu güncellemesini sağlıyoruz. Grant All on kısmı ile ise belirli veritabanlarına erişim izni veriyoruz. Burada dikkat edilmesi gereken nokta veritabani_adi.tablo_adi kısmıdır. Bu kısımda sadece kullanacağımız veritabanlarında işlem yapmasını sağlayabileceğimiz gibi *.* gibi joker tanımlama ile tüm veritabanlarına ve içerilerindeki tablolara veya veritabani_adi.* gibi bir joker tanımlama ile belirlediğimiz veritabanına ait tüm tablolara erişim ve kullanım yetkisi vermekteyiz.
  • Tüm bu kullanıcı oluşturma, izinleri verme ve erişilebilir veritabanlarını tanımlama işlemlerinden sonra exit yazarak MariaDB arayüzünden çıkış yapabiliriz. Şimdi sırada MariaDB'nin sunucu konfigürasyonunu güncellemek kaldı.
  • Bunun için aşağıdaki komutu konsola yazıyoruz.
    sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
  • Önümüze nano metin düzenleyicisi geldikten sonra aşağıdaki gibi bir konfigürasyon dosyası görmemiz gerekli.
    Eki Görüntüle 769512

    Şimdi yapmamız gereken sadece 2 adet satırı düzenlemek.
    #port 3306 yazan satırı port 3306 şeklinde düzenliyoruz. bind-address 127.0.0.1 yazan satırı ise bind-address 0.0.0.0 şeklinde düzenliyoruz. Son halinde dosyamız aşağıdaki gibi gözükmeli:
    Eki Görüntüle 769521

    Resimdeki gibi gözüküyorsa eğer dosyamız sırasıyla Ctrl + S ve Ctrl + X kombinasyonlarını kullanıp dosyamızı kaydedelim ve nano'dan çıkış yapalım.
  • Evet, artık geriye kalan tek işlem MariaDB işlemlerini yeniden başlatmak ve sunucumuza bağlanmaya çalışmak. Bunun için aşağıdaki komutları sırasıyla giriyoruz.
    sudo systemctl restart mysql.service
    sudo systemctl restart mariadb.service
    Hizmetleri yeniden başlattığımıza göre son bir kontrol olarak 3306 (varsayılan MySQL/MariaDB veritabanı portunu) kontrol edelim. Bunun için sudo netstat -anp | grep 3306 komutunu çalıştıralım. Bize aşağıdaki gibi bir çıktı vermesi gerekli.
    tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN [işlemin_pid_numarası]/mysqld
    Eki Görüntüle 769528
  • Son olarak herhangi bir MariaDB destekli veritabanı yönetimi yazılımı ile (ben Navicat'ı tercih ediyorum) ile MariaDB sunucumuzun bilgilerini girip bağlantı testini deneyelim.
    Eki Görüntüle 769538

Ve gördüğünüz gibi hedefimize ulaştık. Artık veritabanımıza yerel makine (localhost) dışında dışarıdan başka bir cihaz ile bağlanabiliyoruz.

Çözümü bulmama yardımcı olan siteyi de şuraya bırakalım: Configure Remote Access to MySQL / MariaDB Databases | Website for Students
kral teşekkür ederim
 
Normalde gerekli UFW ayarı yapıldığında da ulaşabilmeniz gerekli. Alternatif yöntem olarak sunulabilir, güzel çalışma.
 
Normalde gerekli UFW ayarı yapıldığında da ulaşabilmeniz gerekli. Alternatif yöntem olarak sunulabilir, güzel çalışma.
Raspbian üzerinde sunulan herhangi bir güvenlik duvarı (firewall) sunulmamakta. UFW (Ubuntu Firewall), adından da anlaşılabileceği gibi Ubuntu'ya has dahili gelen bir güvenlik duvarı (aynı Windows Güvenlik Duvarı gibi).

Bu arada Ubuntu üzerinde kullanan arkadaşlar için UFW üzerinden vermeleri gereken izin kodunu da paylaşmış olalım ki sorun yaşayacak olanlar şimdiden çözüme sahip olsunlar. Hatırlattığınız için teşekkürler.

Uçbirimde çalıştırmanız gereken komut: sudo ufw allow 3306
Alternatif olarak yalnızca belirli dış istemcilere izin vermek istiyorsanız şu komutu çalıştırabilirsiniz: sudo ufw allow from [istemci_ip] to any port 3306

Yaşadığım sorunun kaynağını mariadb-secure-installation kurulumu esnasında bana MariaDB'nin "root" kullanıcısının dış ağdan erişimine kapat demem kaynaklı olduğunu düşünmekteyim. Aksi halini denemedim yani test etmedim fakat bundan kaynaklı olduğunu şiddetli bir şekilde düşünmekteyim. Müsait bir vaktimde MariaDB'nin bu kurulum betiğine dış ağ erişimi kontrolü için ayrı bir menü ekleyip Jira isteği atmayı düşünmekteyim.
 

Geri
Yukarı