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.

EGPNL, siz bir veritabanı oluşturduğunuzda kullanıcıyı doğru yetkilerle kurar; bu sayfa en çok kendi yönettiğiniz bir sanal sunucuda önem taşır.