Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

MySQL/MariaDB'de Kullanıcı Yetkilendirmesi ve Uzaktan Bağlantı Güvenliği En İyi Uygulamaları

codexor

Üye
Katılım
14 Mart 2026
Mesajlar
44
Merhaba arkadaşlar, bugün sizlere özellikle yeni sunucu kurulumlarında çok kritik olan bir konudan bahsedeceğim: MySQL veya MariaDB'de kullanıcı yetkilendirmesi ve uzaktan bağlantı güvenliği. Yıllar içinde gördüğüm en yaygın güvenlik açıklarından biri, varsayılan ayarlarla bırakılan veya "root" kullanıcısının her yerden bağlanmasına izin verilen veritabanı sunucuları. Bu rehberde, hem sunucunuzu daha güvenli hale getirecek hem de yetki karmaşasını önleyecek adımları anlatacağım.

🔐 Temel Güvenlik Önlemleri ve Root Kullanıcısı

İlk yapmanız gereken, kurulum sonrası temel güvenlik betiğini çalıştırmak. MariaDB için genelde kurulu gelir, MySQL'de ise manuel çalıştırmanız gerekebilir.

Bash:
sudo mysql_secure_installation

Bu betik size; anonim kullanıcıları silmeyi, root'un uzaktan bağlanmasını engellemeyi, test veritabanını kaldırmayı ve root şifresini yeniden ayarlamayı soracak. Benim sunucularda genelde hepsine "Y" (Evet) cevabını veririm.

Daha sonra, root kullanıcısının sadece yerel sunucudan (localhost) bağlanabildiğinden emin olun. Bunu kontrol etmek için MySQL/MariaDB kabuğuna girin:

SQL:
SELECT user, host FROM mysql.user WHERE user = 'root';

Eğer host sütununda '%' (yüzde işareti) görürseniz, bu root'un herhangi bir IP'den bağlanabileceği anlamına gelir. Hemen bu yetkiyi kaldırmanızı tavsiye ederim.

👤 Uygulama Bazlı Özel Kullanıcı Oluşturma

Her web uygulamanız (WordPress, özel yazılımınız vb.) için ayrı bir veritabanı ve ayrı bir kullanıcı oluşturun. "root" kullanıcısını asla uygulama bağlantılarında kullanmayın. İşte örnek bir senaryo: "myblog" adında bir WordPress siteniz olsun.

Önce veritabanını oluşturalım:
SQL:
CREATE DATABASE myblog_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Şimdi bu veritabanı için özel bir kullanıcı oluşturalım. Kullanıcı adı ve şifreyi güçlü seçin.
SQL:
CREATE USER 'myblog_user'@'localhost' IDENTIFIED BY 'GüçlüBirParola123!';

Son olarak, bu kullanıcıya SADECE kendi veritabanı üzerinde gerekli tüm yetkileri (GRANT ALL) verelim:
SQL:
GRANT ALL PRIVILEGES ON myblog_db. TO 'myblog_user'@'localhost';

İşlemlerin geçerli olması için yetkileri yeniden yüklemeyi unutmayın:
SQL:
FLUSH PRIVILEGES;

Bu şekilde, bir uygulama tehlikeye girerse bile diğer veritabanlarınız etkilenmez.

🌐 Uzaktan Bağlantıyı Güvenli Hale Getirme

Bazen bir uygulamanın farklı bir sunucudan veritabanına bağlanması gerekebilir. Bu durumda, kullanıcı oluştururken 'localhost' yerine, bağlanacak sunucunun SABİT IP adresini belirtmek en güvenli yöntemdir. Diyelim ki uygulama sunucunuzun IP'si `192.168.1.100` olsun.

SQL:
CREATE USER 'myapp_user'@'192.168.1.100' IDENTIFIED BY 'BaşkaGüçlüParola456!';
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db. TO 'myapp_user'@'192.168.1.100';
FLUSH PRIVILEGES;

Şu ayara çok dikkat etmelisiniz: Eğer gerçekten çok gerekli değilse, '%' (her yer) ifadesini kullanarak kullanıcı oluşturmayın. Bu, güvenlik duvarınızı devre dışı bırakmak gibidir.

⚠️ Güvenlik Duvarı ve Bağlantı Ayarları[/COLUM]

Kullanıcı yetkilerini ayarladınız, peki ya sunucunuzun güvenlik duvarı? MySQL/MariaDB varsayılan olarak `3306` portunu kullanır. Bu portu sadece güvendiğiniz IP adreslerine açmalısınız. Örnek bir UFW (Uncomplicated Firewall) kuralı:

Bash:
sudo ufw allow from 192.168.1.100 to any port 3306

Ayrıca, bağlantı ayar dosyasını da kontrol edin. Genellikle /etc/mysql/mariadb.conf.d/50-server.cnf veya /etc/mysql/my.cnf dosyasında `bind-address` satırını bulun.
NGINX:
bind-address = 127.0.0.1
Eğer sadece yerel sunucudan bağlantı kabul edecekseniz bu adres yeterli. Farklı bir sunucudan bağlanılacaksa, buraya sunucunuzun yerel IP'sini (örn: 192.168.1.1) yazabilirsiniz. Asla `0.0.0.0` yapmayın.

🔍 Yetkileri Kontrol Etme ve Temizlik

Zamanla birçok kullanıcı ve yetki birikebilir. Periyodik olarak kontrol etmek iyi olur. Hangi kullanıcıların hangi yetkileri olduğunu görmek için:
SQL:
SELECT user, host, Grant_priv, Super_priv FROM mysql.user;

Kullanılmayan bir kullanıcıyı silmek için ise:
SQL:
DROP USER 'eski_kullanici'@'localhost';

Son bir tavsiye: Tüm bu değişiklikleri yapmadan önce, özellikle canlı sunucularda, mutlaka bir yedeğini alın. /etc/mysql/ dizinini ve veritabanlarınızı yedeklemek sizi büyük baş ağrılarından kurtarır.

Umarım bu rehber, veritabanı sunucunuzun güvenliğini sağlamlaştırmanıza yardımcı olur. Ben genelde her proje için ayrı kullanıcı + güçlü parola + IP kısıtlaması üçlüsünü uyguluyorum. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı önerileriniz veya takıldığınız bir nokta varsa aşağıya yazmaktan çekinmeyin. Kolay gelsin!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri