Veritabanı kullanıcısı tablo silebilen ve diğer bütün veritabanlarını okuyabilen bir site, sunucudaki her şeyi kaybetmeye tek bir SQL enjeksiyonu uzaklıktadır. Çaresi hiçbir şeye mal olmaz: her siteye yalnızca kendi veritabanı üzerinde hakkı olan kendi kullanıcısını verin.
Tek veritabanı için tek kullanıcı
CREATE USER 'site_shop'@'localhost' IDENTIFIED BY 'a-long-random-password';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'site_shop'@'localhost';
FLUSH PRIVILEGES;
Bu dört fiil, çalışan bir uygulamanın gereksindiğidir. Neyin eksik olduğuna dikkat edin: DROP, ALTER, CREATE ve *.* üzerindeki her şey.
Bir kurulumun kısa süreliğine gerektirdiği
Bir kurulum ya da göç, gerçekten tablo oluşturmaya ve değiştirmeye ihtiyaç duyar. Kurulum boyunca verin, sonra geri alın - yalnızca kullanıldığı sürece elde tutulan bir izin, kullanılmadığında kötüye kullanılamaz.
GRANT CREATE, ALTER, INDEX, DROP ON shop.* TO 'site_shop'@'localhost';
-- after the install
REVOKE CREATE, ALTER, INDEX, DROP ON shop.* FROM 'site_shop'@'localhost';
Şunlar asla
GRANT ALL ON *.* bir siteye sunucudaki bütün öbür veritabanları üzerinde okuma ve yazma, üstüne de kullanıcı oluşturma hakkı verir. Fazlasıyla çok eğitimde varsayılan budur.- FILE - sunucudaki dosyaları veritabanı kullanıcısı kimliğiyle okur ve yazar.
- SUPER - genel ayarları değiştirir ve başkalarının oturumlarını sonlandırır.
- GRANT OPTION - kullanıcının hak dağıtmasına izin verir, kendisine de dahil.
Daha önce ne verdiğinizi denetleyin
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'site_shop'@'localhost';
Sunucu kısmı güvenliğin yarısıdır
'user'@'localhost' yalnızca makinenin kendisinden bağlanabilir. 'user'@'%' internetin herhangi bir yerinden bağlanabilir ve o zaman yolda duran tek şey bir paroladır.
