MySQL 5.6 ve 5.7 kullananlar büyük ihtimal görmüştür, shell’de ya da mysql log’da şu uyarı çıkıyor: “Using a password on the command line interface can be insecure.” Daha düşük sürümdeysen zaten hiç takılmana gerek yok, bu olay direkt o versiyonlarla alakalı.
Genelde olay şu, questlib.lua içindeki standart mysql_query fonksiyonunu kullananlarda bu warning sürekli düşüyor. Çünkü şifreyi direkt command line üzerinden veriyorsun, MySQL de bunu sevmiyor haliyle. Ben de bir süre görmezden geldim ama sonra temiz çözüm aradım. Burada çözüm aslında mysql_config_editor kullanmak. Eğer normal bir mysql user kullanıyorsan şu komutu giriyorsun:
mysql_config_editor set --login-path=local --host=localhost --user=YOURUSERNAME --password
root kullanıyorsan da aynı mantık:
mysql_config_editor set --login-path=local --host=localhost --user=root --password
Şifreyi girdikten sonra sistem .mylogin.cnf diye şifreli bir dosya oluşturuyor. User için /home/YOURUSERNAME/.mylogin.cnf, root için /root/.mylogin.cnf altında oluyor. İçini direkt okuyamıyorsun ama şu komutla ne var görebiliyorsun:
mysql_config_editor print --all
Bundan sonra mysql’a girerken de direkt:
mysql --login-path=local
yeterli oluyor, artık şifreyi command line’a yazmıyorsun.
Sonra iş questlib.lua tarafına geliyor. Artık config’ten user/pass çekmeye gerek kalmıyor, o yüzden eski mysql_query fonksiyonunu silip aşağıdakini koyuyorsun:
kod bloğu:
Bunu yaptıktan sonra warning tamamen kesiliyor. Hem daha temiz hem de uğraştırmıyor. Ben bu şekilde kullanıyorum, sorun çıkarmadı şu ana kadar.
Genelde olay şu, questlib.lua içindeki standart mysql_query fonksiyonunu kullananlarda bu warning sürekli düşüyor. Çünkü şifreyi direkt command line üzerinden veriyorsun, MySQL de bunu sevmiyor haliyle. Ben de bir süre görmezden geldim ama sonra temiz çözüm aradım. Burada çözüm aslında mysql_config_editor kullanmak. Eğer normal bir mysql user kullanıyorsan şu komutu giriyorsun:
mysql_config_editor set --login-path=local --host=localhost --user=YOURUSERNAME --password
root kullanıyorsan da aynı mantık:
mysql_config_editor set --login-path=local --host=localhost --user=root --password
Şifreyi girdikten sonra sistem .mylogin.cnf diye şifreli bir dosya oluşturuyor. User için /home/YOURUSERNAME/.mylogin.cnf, root için /root/.mylogin.cnf altında oluyor. İçini direkt okuyamıyorsun ama şu komutla ne var görebiliyorsun:
mysql_config_editor print --all
Bundan sonra mysql’a girerken de direkt:
mysql --login-path=local
yeterli oluyor, artık şifreyi command line’a yazmıyorsun.
Sonra iş questlib.lua tarafına geliyor. Artık config’ten user/pass çekmeye gerek kalmıyor, o yüzden eski mysql_query fonksiyonunu silip aşağıdakini koyuyorsun:
kod bloğu:
mysql_query = function(query)
mysql_query = function(query)
math.randomseed(os.time())
local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
os.execute('mysql --login-path=local -e'..string.format('%q',query)..' > '..fi)
for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
for i = 2, table.getn(t) do
table.foreach(t,function(a,b)
out[i-1] = out[i-1] or {}
out[i-1][a] = tonumber(b) or b or 'NULL'
out[t[1][a]] = out[t[1][a]] or {}
out[t[1][a]][i-1] = tonumber(b) or b or 'NULL'
end)
end
out.__lines = t[1]
return out
end
end
Bunu yaptıktan sonra warning tamamen kesiliyor. Hem daha temiz hem de uğraştırmıyor. Ben bu şekilde kullanıyorum, sorun çıkarmadı şu ana kadar.


