Bir masaüstü istemcisini sunucudaki bir veritabanına bağlamanız gerekiyor. Hızlı yol - bütün adreslere bağlanıp kapıyı açmak - veritabanınızı bütün internetin önüne koyar; orada tarayıcılar onu saatler içinde bulur. Daha iyi ve daha uzun sürmeyen bir yol var.

Doğru yanıt: bir SSH tüneli

ssh -N -L 3307:127.0.0.1:3306 sara@server.example.com

# then point the client at:
#   host 127.0.0.1   port 3307

Veritabanı yalnızca localhost'u dinlemeyi sürdürür, güvenlik duvarında hiçbir şey açılmaz ve bağlantıyı SSH şifreler. Her masaüstü istemcisinde - TablePlus, DBeaver, Sequel Ace, MySQL Workbench - bu, bir SSH seçeneği olarak yerleşiktir.

Zaten açıkta olmadığını doğrulayın

sudo ss -tlnp | grep 3306
# 127.0.0.1:3306  good
# 0.0.0.0:3306    exposed
# /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1

Gerçekten erişilebilir olması gerekiyorsa

Örneğin başka bir veri merkezindeki bir uygulama sunucusu. O zaman: sağlayıcı sunuyorsa özel bir ağ, kaynak adresi tam olarak belirten bir güvenlik duvarı kuralı, o sunucuyla sınırlı bir kullanıcı ve zorunlu TLS.

sudo ufw allow from 203.0.113.20 to any port 3306 proto tcp

CREATE USER 'app'@'203.0.113.20' IDENTIFIED BY '...' REQUIRE SSL;
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'app'@'203.0.113.20';
Sunucu adı yerine joker koyarak asla kullanıcı oluşturmayın - 'app'@'%' için verilen bir yetki, yeryüzünün herhangi bir yerinden demektir. Bir veritabanının ele geçirilmesinin tek en yaygın sebebi budur ve tek bir karakterden ibarettir.

Halihazırda ne olduğunu denetleyin

SELECT user, host FROM mysql.user ORDER BY host;

Sunucu sütununda % bulunan her satır bir açıklamayı hak eder. Bakınız fazlasını vermeden kullanıcılar ve yetkiler.