2016-05-12 2 views
1

Wir haben vor kurzem den Wechsel von SQL Server zu MySQL für neue Projekte gemacht, und ich bin immer noch kämpfen, um mich um das Sicherheitsmodell zu kümmern.MySQL-Benutzer mit gelöschten Privilegien kann immer noch auf Datenbank zugreifen

Eine unserer Anwendungen hat einen MySQL-Benutzer namens MyApplicationUser. Wenn ich diese Anwendung zum ersten Mal entwickelte, gab ich dem Benutzer, was ich für die erforderlichen Privilegien hielt.

Und es schien zu funktionieren, also dachte ich nicht mehr darüber nach. Irgendwann habe ich diese Liste angepasst, so dass der Benutzer auch Indizes erstellen konnte, obwohl ich den Code, den ich dazu benutzt habe, nicht mehr abrufen kann.

Im Rahmen einer Sicherheitsüberprüfung dachte ich, es wäre sinnvoll, diese Berechtigungen auf diejenigen zu beschränken, die der Benutzer tatsächlich benötigt. Also überprüfte ich, was es hatte:

select * from information_schema.user_privileges where grantee like '%MyApplicationUser%'; 

Die haben eine ziemlich lange Liste. Dann lief ich den folgenden Code:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'MyApplicationUser'@'%'; 
GRANT SELECT, INSERT, EXECUTE, UPDATE ON MyApplication.* TO 'MyApplicationUser'@'%';  
FLUSH PRIVILEGES; 

Nun, wenn ich die select von USER_PRIVILEGES betreibe ich nur eine Zeile bekommen - Verwendung. Die Dokumentation besagt, dass dies lediglich ein Grundnutzungsrecht ist. Es sieht also so aus, als hätte mein GRANT-Befehl nicht funktioniert. Beängstigender ist, dass ich beim Ausführen der Anwendung immer noch die Möglichkeit habe, die Daten zu lesen und zu ändern - was darauf hindeutet, dass das Konto andere Rechte als die in user_privileges aufgeführten Rechte hat.

Ich habe versucht, den MySQL-Dienst neu zu starten, um sicherzustellen, dass es "frisch" war, aber der Benutzer hatte immer noch Berechtigungen für die Anwendung.

Versuch Show Zuschüsse für ‚MyApplicationUser‘ läuft @ ‚%‘ erscheint eine Liste der zuvor ausgeführten GRANT-Anweisungen zu zeigen, nicht meinen ersten GRANT einschließlich:

GRANT USAGE ON *.* TO 'MyApplicationUser'@'%' 
GRANT SELECT, INSERT, UPDATE, EXECUTE ON `dataportal`.* TO 'MyApplicationUser'@'%' 

Also: wie ich, was Privilegien herausfinden kann, Mein MyApplicationUser-Konto hat tatsächlich? Wenn es wirklich nur USAGE ist, wie funktioniert die Anwendung noch? Und wie unterscheiden sich Show Grants von user_privileges?

Antwort

1

Zuerst müssen Sie sicherstellen, dass Ihre Anwendung nicht mehr mit dem Datenbankserver verbunden ist.

Überprüfen Sie, ob Ihre Anwendung gestoppt wurde. Um ziemlich sicher zu sein, trennen Sie Ihren Server vom Netzwerk. Stellen Sie außerdem sicher, dass Sie beim Ausführen dieser Vorgänge das root-Konto verwenden.

Dann gehen Sie wie folgt vor:

  • Restart MySQL Dienst
  • Sie die REVOKE ALL PRIVILEGES dann FLUSH
  • GRANT die entsprechenden Berechtigungen auf Ihre Benutzer dann wieder FLUSH
  • Run SELECT * FROM mysql.user

Überprüfen Sie die priv Ileges, die mit 'Y' markiert sind, vergleichen Sie mit dem Ergebnis, das Sie von SELECT * FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE GRANTEE LIKE '%MYAPPLICATIONUSER%';

erhalten Als letzten Ausweg müssen Sie möglicherweise den Benutzer löschen und mit den entsprechenden Berechtigungen neu erstellen.

1

Also: wie kann ich herausfinden, welche Privilegien mein MyApplicationUser-Konto tatsächlich hat?

Ich glaube, Sie dieses

use mysql 
select * from user where user = 'username'; 
verwenden können
Verwandte Themen