1- Tüm mySQL hesapları şifreli olmalı. Aksi taktirde mysql -u forum forum_db gibi bir komutla mysql sunucuya kolayca bağlanabilir.
2- mySQL sunucusunu root kullanıcısı ile asla çalıştırmayın.File yetkisine sahip herhargi bir kullanıcının root olarak bir dosya oluşturmasına sabep olabileceği için bu çok tehlikeli bir durumdur (Örn: ~root/.bashrc). Bunu engellemek için
açıkça –user=root komutu kullanılmadıkça mySQL in root olarak komut çalıştırmasını reddedin.
mySQL,sıradan , yetkisiz kullanıcı yerine çalıştırılabilir.Her şeyi daha güvenli yapabilmek için ayrı bir mySQL isimli Unix hesabı oluşturabilirsiniz.Bu hesabı başka bir Unix kullanıcısı olarak mySQL yönetiminde mysqld başlatmak için
kullanın,Sunucu seçeneklerini belirtiğiniz my.cnf dosyasındaki [mysqld] gurubu başlığı altına bir kullanıcı USER (kullanıcı) ekleyin örnek [mysqld]
user=mysql
Bu, sizin elle belirlediğiniz kullanıcını sunuc tarafından başlatılmasına sebeb olur. Root dan başka mysqld nin Unix kullanıcısı olarak çalıştırılması Kullanıcı tablosundaki root kullanıcı isminin değiştirlmesi gerektiği anlamına gelmez
3- Sembolik Linkerin tablolarda kullanılmasına izin vermeyin. (Bu seçenek –skip-symbolic-links komutu ile iptal edilir) Bu özellikle mysqld yi root olarak çalıştırıyorsanız önemlidir. Çünkü sunucuda yazma yetkisi olan herhangi bir kimse sistemdeki herhangi bir dosay yı silebilir
4- Unix sunucularda Yazma ve Okuma yetkileri olan kullanıcıların mysqld olarak işlem yaptığına emin olun
5- Yönetici olmayan kimselere Proccess veya Super yetkilerini vermeyin. mysqladmin processlist ve SHOW PROCESSLIST çıktısı yürütülen komutları metin olarak gösterir.Sunucu işlem listesini görme yetkisi olan bazı kullanıcılar diğer kullanıcların verdiği komutlrın listesini görebilir (örn : UPDATE user SET password=PASSWORD(’not_secure’)
mysqld, Super yetkisi olan kullanıcılar için extra bağlantı saklar.Tüm normal bağlantılar kullanımda olsa bile mySQL root kullanıcısı giriş yapabilri ve sunucu işlemlerini kontrol edebilir.Super yetkisi istemci bağlantısını kesmek,sistem değişken değerleri ve kopya sunucularını kontrol etmek için kullanılır
6- File yetkisini yönetici olmayanlara vermeyin Bu yetkiye sahip herhangi bir kullanıcı dosya sistemindeki mysqld yetkileri ile herhangi bir yerde dosya oluşturabilir.Bir nebze güvenlik için SELECT … INTO OUTFILE komutu ile üretilmiş dosyalar var olan dosya üzerine yazmazlar ve herkes tarafından yazılabilir durumdalar.
7- File yetkisi herhangi bir dosyayı okumak için kullanılabilir.Bu yetki ile veritabnındaki tabloar okunabilir.Bu durum tehlikeli bi durum örn: bir tablo içine /etc/passwd yüklemek için LOAD DATA kullanılabilir
8- Eğer DNS e güvenmiyorsanız tablolarda Hostname yerine IP kullanın.Her halukarda wildcard içeren hostname değeri kullanarak büyük tablo oluşturma işleminde dikkatli olun
9- Bir hesaba izin verilen bağlantı sayısını sınırlandırmak için mysqld de max_user_connections değişkenini kullanın.GRANT cümlesi kaynak kontrolunu destekler
10- –ssl ile başlayan bağlantı dizeleri kullanın
MySQL’e ek güvenlik sağlamak için;
MySQL de “load data local infile” data özelliği mysql’i çalıştırdığınız kullaniciya sistemdeki dosyaları okuyarak php yada benzeri seylerle engellediğiniz başka dizinlerdeki dosyalari görme kısıtlarını kaldiriyor.Bunu engellemek için
/etc/my.cnf dosyasına
Kod:
set-variable=local-infile=0
satırını eklememiz yeterlidir.