Mysql veritabanı güvenliği

Kadir Çolak
3 min readJun 29, 2020

--

Merhabalar. Bu sefer ki konu birçok kişiyi kapsıyor, hem önemli hem de herkes tarafından bilinmesi ve dikkat edilmesi gerek. Web siteleri, mobil uygulamalar ya da diğer yazılımlar olsun hepsinde bir veritabanı var. Kayıtlar, kullanıcı bilgileri ve diğer her bir işlem veritabanına kayıt ediliyor. Buraya kadar bir sıkıntı yok ama asıl sıkıntı sonrasında, bu veriler nasıl korunacak? Veritabanı güvenli nasıl sağlanacak?

Veritabanı yönetim sistemlerinin yöneticiden kullanıcıya doğru hiyerarşisi ve geçtiği adımlar
Veritabanı güvenliği nasıl sağlanır?

Microsoft Access, Oracle, Mysql, Mssql veya Sqlite. Veritabanı yönetim sistemleri sayısı oldukça fazla ama teoride hepsi aynı, detayları ve işlemleri farklı sadece. Bu blog yazımda ben Mysql üzerinde veritabanı güvenliği nasıl yapılır, nasıl yapılmalı bunlardan bahsedeceğim.

Veritabanının sadece bir yöneticisi olmalı

Bilgisayardan işlem yapan kişinin sağında sunuculara bakan görevli personel
Veritabanının sadece bir yöneticisi olmalı

Her bir veritabanının bir yöneticisi olmalıdır. Yönetici olarak ya da web developer olarak aynı veritabanını 2 farklı kullanıcı da işleyebilir, bu teoride mümkün ama güvenlik olarak bir zaafiyet. Peki neden böyle yapmalı?

O veritabanı üzerinde sadece bir kullanıcının işlem yapabilme yetkisi varsa sorumluluk tamamen o kişinindir. Diğer kişi şunu yaptı, bunu yaptı söylemi olmaz.

Şifreler zor ve karışık olmalı

Farklı ve numerik şifreler içerisinde yeşil renkte parlayan “password” yazısı
Uzun ve karmaşık bir yapıda şifre belirlenmeli

Veritabanına bağlanırken sunucu adresi, veritabanı adı, kullanıcı adı ve şifresi bilgileri girilir. Sunucu değiştirilemez çünkü web sitesi sabit bir değişken ama diğer veriler değiştirilebilir. Nedir bunlar? veritabanı adı, kullanıcı adı ve şifre. Şifre en az 10 karakter uzunlukta ve bir küçük harf, bir büyük harf ve bir sayıdan oluşmak şekliyle karışık bir kombinasyona sahip olmalıdır.

Şifreler kırılmaz ve güvenilir araçlar değildir. Bunun farkında olarak neden şifre bu kadar hayati önem taşıyor diye sorabilirsiniz. Unutulmaması gereken nokta şudur ki sızma ya da verileri ele geçirme yönteminde ilk uygulanan yol şifreyi ele geçirmek olacaktır. İlk seviyede en azından yeterli açıdan alt yapıyı oluşturmak gerekiyor.

Veriler şifrelenmeli ve açık olarak gösterilmemeli

Salt içeriğin şifreleme algoritmasından sonra içerik olarak yaşadığı değişim
Veriler şifreleme algoritmalarıyla şifrelenmeli

Senaryoya göre değişmekle birlikte veritabanında kullanıcıya dair özel bilgiler ( TC kimlik numarası, e-mail adresi, telefon numarası, adı ve soyadı, şifresi) yer alacaktır. Veritabanında düz şekilde TC kimlik numarası 12345678901 şekliyle gözükecekse güvenlik diye bir şeyden bahsedilemez. Aynı şekilde mail adresi ahmetyilmaz@gmail.com olarak da gözüküyorsa hiçbir ilerleme, hiçbir işlem yapmadınız demektir.

Peki veriler nasıl şifrelenecek? Burada php’nin bize sunduğu iki ücretsiz yöntem var. Bunlar md5 ve hash algoritmalarıdır. Nedir bu tam olarak? Neyi şifreler ve nasıl şifreler? Gerçekten ihtiyaç var mı?

Kullanıcıdan gelen bir bilgi olduğunu hayal edelim. Bu veri 05550000000 olsun. Bir telefon numarası kayıt edeceğiz. md5 algoritması ile bunu şifrelersek göreceğimiz ifade ne olacak?

4190a8ecbbfb417de8dafe8dd9a686db

Bu veriyi görünce aklınıza ne geliyor? Anlamlı bir sonuç çıkartıyor musunuz? Tabi ki hayır. Görünen tarafta bu verinin yazması içeriğin ne olduğunun bilinmesine karşı bile bir ipucu vermeyecektir. Normalde 05550000000 verisini gören birisi bunun telefon numarası olduğunu anlayacaktır. Ama bu md5 şifrelemesi veriyi anlaşılamaz, içeriğini bilinemez hale getirecektir.

Bu işlemler sadece Mysql bazlı ya da Mssql bazlı yapılması gereken güvenlik adımları olarak görülmemelidir. Hangi veritabanı yönetim sistemi olursa olsun teori bazlı bu hareketler ortaktır, her birinin yapılması güvenliği bir nebze artıracak ve verimliliği sağlayacaktır.

--

--