Metin2 MySQL 5.6–5.7 “Using a password on the command line interface can be insecure” Hatası Çözümü | mysql_config_editor ve mysql_query Fix Rehberi
admin
Katılım
23 Eki 2022
Mesajlar
8,740
Çözümler
12
Tepkime puanı
6,299
Puanları
113
Yaş
28

Metin2 MySQL 5.6–5.7 "Using a password on the command line interface can be insecure" Hatası ve Kesin Çözümü (mysql_config_editor + mysql_query Fix Rehberi)

Metin2 sunucularında özellikle MySQL 5.6 ve 5.7 kullanan sistemlerde sıkça görülen uyarılardan biri:

"Using a password on the command line interface can be insecure."

Bu hata aslında kritik bir crash değildir, ancak hem log kirliliği oluşturur hem de bazı sistemlerde güvenlik riskine işaret eder. Özellikle questlib.lua içindeki mysql_query fonksiyonu doğrudan shell üzerinden MySQL çağırdığı için bu uyarı sürekli tetiklenir.


❗ Sorunun Temel Sebebi

Metin2'de klasik yapı şu şekildedir:

  • Lua → os.execute()
  • Shell → mysql -u user -pPASSWORD
  • MySQL → uyarı üretir

Buradaki problem:

  • Şifre komut satırında açık şekilde taşınır
  • MySQL bunu güvenli bulmaz
  • Log'a sürekli warning düşer


🧠 Neden Bu Bir Problem?

Bu uyarı şunlara sebep olur:

  • SSH / shell loglarının şişmesi
  • Hosting panelinde gereksiz alarm görünmesi
  • Paylaşımlı sunucularda güvenlik zafiyeti riski
  • Debug sırasında gerçek hataların görünmemesi
  • Profesyonel olmayan server görünümü


✅ EN DOĞRU ÇÖZÜM: mysql_config_editor Kullanımı

MySQL'in önerdiği en temiz yöntem budur.


1. Login Path Oluşturma

Normal kullanıcı:


mysql_config_editor set --login-path=local --host=localhost --user=YOURUSERNAME --password



Root kullanıcı:


mysql_config_editor set --login-path=local --host=localhost --user=root --password



Şifreyi girdikten sonra MySQL bunu şifreli şekilde saklar.


📁 Oluşan Dosya

Sistem şu dosyayı oluşturur:

  • User:
    /home/USER/.mylogin.cnf
  • Root:
    /root/.mylogin.cnf

⚠️ Bu dosya:

  • Direkt okunamaz
  • Şifreli formatta saklanır
  • Manuel edit önerilmez


2. Login Test

Artık MySQL'e giriş:


mysql --login-path=local



✔ Şifre yazılmaz
✔ Warning oluşmaz
✔ Güvenli bağlantı sağlanır


🧩 Metin2 Questlib.lua MYSQL QUERY FIX

Şimdi en önemli kısım: Metin2 tarafı.

Standart sistemde:


os.execute("mysql -u root -p12345 -e 'query'")



Bu yapı warning üretir.


🔥 Temiz ve Optimize mysql_query (FIX)

Aşağıdaki yapı hem log temizler hem güvenli çalışır:


mysql_query = function(query)
math.randomseed(os.time())

local file = 'mysql_data_' .. math.random(1000000000)
local t, out = {}, {}

os.execute('mysql --login-path=local -e' .. string.format('%q', query) .. ' > ' .. file)

local f = io.open(file, 'r')
if not f then return {} end

for line in f:lines() do
table.insert(t, split(line, '\t'))
end

f:close()
os.remove(file)

for i = 2, #t do
for k, v in pairs(t[1]) do
out[i-1] = out[i-1] or {}
out[i-1][k] = tonumber(t[k]) or t[k] or 'NULL'

out[t[1][k]] = out[t[1][k]] or {}
out[t[1][k]][i-1] = tonumber(t[k]) or t[k] or 'NULL'
end
end

out.__lines = t[1]
return out
end




⚙️ Bu Fix Ne Sağlar?

✔ Şifre artık Lua içinde yok
✔ Command line password warning ortadan kalkar
✔ Daha stabil mysql çağrısı
✔ Temiz temp file sistemi
✔ Metin2 quest sisteminde daha az crash riski


⚠️ DİKKAT EDİLMESİ GEREKENLER

  • mysql_config_editor sadece Linux ortamında düzgün çalışır
  • Login path adı (local) değiştirilebilir ama sabit tutulmalı
  • Questlib içinde aynı anda eski mysql_query bırakılmamalı
  • File write permission hatalarına dikkat edilmeli


🚀 EXTRA OPTİMİZASYON ÖNERİSİ

Daha profesyonel sunucularda:

  • Direct socket mysql driver (C++ source mod) kullanılır
  • Lua os.execute tamamen kaldırılır
  • Query cache sistemi eklenir


🧩 SONUÇ

Bu hata aslında kritik bir bug değil, ama:

  • Sunucu temizliği
  • Güvenlik
  • Profesyonel görünüm

açısından mutlaka düzeltilmelidir.

En doğru çözüm:

✔ mysql_config_editor + login-path
✔ güncellenmiş mysql_query wrapper
 
Üst
Reklam Ver
R10dev.net'i ana ekrana ekle!