2016-10-30 2 views
0

Ich nahm eine MySQL-Klasse vor ein paar Jahren, wo der Lehrer uns separate Benutzer mit verschiedenen Berechtigungen auf den Tabellen als letzte Verteidigungslinie gegen Angriffe wie SQL-Injektion erstellen ließ. Die Nutzer würden im Grunde wie folgt erstellt werden:MySQL separate Benutzer für Lesen, Schreiben und Admin

CREATE USER 'read'@'localhost' IDENTIFIED BY 'password'; 
GRANT SELECT ON * TO 'read'@'localhost'; 

CREATE USER 'write'@'localhost' IDENTIFIED BY 'password'; 
GRANT SELECT, INSERT, UPDATE, DELETE ON * TO 'write'@'localhost'; 

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password'; 
GRANT ALL ON * TO 'admin'@'localhost'; 

Dann basiert, was die Anwendung mit der Datenbank tun würden Sie die Anmeldeinformationen verwenden, die einen ausreichenden Zugang hatte. Ich habe kürzlich versucht, dies zu implementieren und habe versucht zu sehen, was die besten Praktiken dafür sind, aber ich konnte nichts finden.

Gibt es Best Practices dafür? Machen die Leute das wirklich? Ist es mit vorbereiteten und sanierten Aussagen übertrieben?

+0

FYI: Die üblichen Berechtigungen sind 'SELECT, INSERT, UPDATE, DELETE'. – duskwuff

+0

Ich habe DELETE vergessen. Ich habe es hinzugefügt. – AkBKukU

Antwort

1

Ich denke nicht, dass dies eine Best Practice ist. Natürlich ist es eine Best Practice, die richtigen Berechtigungen zu haben. Und Lesezugriff für schreibgeschützte Anwendungen ist gut.

Die einfachste Methode zur Vermeidung von Injektionen ist die Verwendung parametrisierter Abfragen. Dies ist Ihre erste Verteidigungslinie. Wenn alle Abfragen select Abfragen sind, ist die Verbindung als Benutzer mit Nur-Lese-Zugriff ein Gewinn.

Wenn Sie jedoch auch die Datenbank ändern, funktioniert dies nicht. Umschließen Sie stattdessen den Code, der die Änderungen in gespeicherten Prozeduren vornimmt. Diese können unter einem anderen Sicherheitskontext ausgeführt werden. Dies ermöglicht der Anwendung Leseberechtigungen und Ausführungsberechtigungen, jedoch keine Datenänderungsberechtigungen.

Es gibt noch andere Vorteile zu gespeicherten Prozeduren direkt statt insert/update/delete Aussagen. Zum Beispiel: Sie können die Vorgänge protokollieren, Sie können zusätzliche Logik ausführen, Sie können mehrere Tabellen gleichzeitig ändern, Transaktionen können aus der Anwendung ausgeblendet werden.

+0

Ich habe parametrisierte Abfragen als den Weg gesehen, an vielen Orten zu gehen. Ich begann meine Abfragen in Stored Procedures in Pet-Projekten vor einiger Zeit nur für die Portabilität zu wickeln. Aber ich habe nicht untersucht, wie sich die Berechtigungen zwischen ihnen und regulären Abfragen unterscheiden. – AkBKukU

Verwandte Themen