MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Sichern von MySQL – Nutzung von Datenzugriffsrechten für eine sichere Installation

Die Sicherheit der MySQL-Installation sollte jedem MySQL-DBA ein Anliegen sein. Während wir darüber gesprochen haben, wie Sie sich um Ihre MySQL-Sicherheit als Ganzes kümmern sollten (sehen Sie sich einige unserer vorherigen Posts an, insbesondere die MySQL-Sicherheitsserien Teil Eins und Teil Zwei), haben wir keine spezifischen sicherheitsbezogenen Probleme besprochen. einschließlich der Probleme im Zusammenhang mit Berechtigungen. Das machen wir hier.

Was sind Privilegien in MySQL?

Privilegien in MySQL können Konten gewährt werden. Wenn Sie Kontoberechtigungen in MySQL gewähren, bestimmen Sie, welche Operationen das Konto ausführen kann. Berechtigungen können entweder Datenbanken oder Datenbankobjekten (Tabellen, Indizes, Ansichten usw.) erteilt werden. Berechtigungen können auch dynamisch oder statisch sein. Statische Privilegien sind in den Server eingebaut, während dynamische Privilegien zur Laufzeit definiert werden können.

How to Use of Privileges for MySQL Security

Um Privilegien in MySQL nutzen zu können, müssen Sie Folgendes beachten:

  • Um Privilegien zuzuweisen oder zu entziehen, benötigen Sie einen MySQL-Benutzer. Benutzer können erstellt werden, indem eine CREATE USER-Abfrage ausgeführt wird:
     

    CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;

  • Verwenden Sie zum Zuweisen oder Widerrufen von Berechtigungen die Anweisungen GRANT bzw. REVOKE:
     

    GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’;
    REVOKE INSERT ON *.* FROM ‘demouser’@’localhost’;

  • Sie können Privilegien speichern, indem Sie FLUSH PRIVILEGES ausführen. Zeigen Sie sie an, indem Sie SHOW GRANTS ausführen.

  • Die GRANT-Anweisung kann nicht verwendet werden, um sowohl Privilegien als auch Rollen zu gewähren; die Anweisung muss entweder Privilegien oder Rollen gewähren.

Beachten Sie Folgendes, um Ihre MySQL-Installation sicherer zu machen:

  • Gewähren Sie Ihren Benutzern nur die Berechtigungen, die zum Ausführen ihrer Aufgaben erforderlich sind (verwenden Sie z. B. GRANT ALL nicht, wenn dies der Fall ist nicht notwendig)

  • Vermeiden Sie es im Allgemeinen, MySQL als Unix-Root-Benutzer auszuführen, da jeder Benutzer mit dem FILE-Privileg verursachen kann den Server zum Erstellen von Dateien als root.

  • Erteilen Sie Benutzern, die keine Administratoren sind, kein FILE-Privileg (siehe Erklärung oben)

  • Ziehen Sie in Erwägung, mysqld als normaler, nicht privilegierter Benutzer auszuführen.

  • Erteilen Sie Benutzern, die keine Administratoren sind, keine PROCESS- oder SUPER-Berechtigungen. Das PROCESS-Privileg ermöglicht es dem Benutzer, alle in MySQL laufenden Prozesse anzuzeigen. Das SUPER-Privileg ermöglicht unter anderem Änderungen der Serverkonfiguration, die Verwendung der CREATE SERVER-, ALTER SERVER- und DROP SERVER-Anweisungen sowie die Verwendung der KILL-Anweisung, mit der der Benutzer Anweisungen löschen kann, die zu anderen Konten gehören. Denken Sie daran, dass MySQL eine zusätzliche Verbindung für Benutzer reserviert, die das SUPER-Privileg haben. Mit der SUPER-Berechtigung kann ein Benutzer auch Replikationsserver steuern.

Folgen Sie den obigen Ratschlägen und Sie sollten auf dem besten Weg zu einer sichereren MySQL-Installation sein. Wenn Sie jedoch eine neuere Version von MySQL verwenden, müssen Sie sich noch einer Sache bewusst sein – MySQL hat in MySQL 8.0.16 Rollen eingeführt.

Rollen in der MySQL-Sicherheit

Wenn Sie noch nie von Rollen in MySQL gehört haben, machen Sie sich keine Sorgen. Rollen sind Privilegien sehr ähnlich, weshalb wir sie in diesen Blogbeitrag aufgenommen haben. Tatsächlich sind Rollen genau das – sie sind Sammlungen von Berechtigungen, d. h. wenn einem Nutzer eine Rolle zugewiesen wird, werden einem Nutzer alle mit dieser Rolle verbundenen Berechtigungen zugewiesen. Rollen können mit den Anweisungen CREATE ROLE und DROP ROLE hinzugefügt und entfernt werden. Um Rollen in MySQL zu verwenden, erstellen Sie einen Rollennamen, gewähren Sie dieser Rolle Privilegien und weisen Sie sie dann einem Benutzer wie folgt zu:

CREATE ROLE [IF NOT EXISTS] ‘role_1’;
GRANT SELECT ON db_name.* TO user_name;
GRANT role_1 TO [email protected];

Welche Privilegien sollten Sie gewähren?

Befolgen Sie bei der Vergabe von Privilegien das Prinzip der geringsten Privilegien:einem MySQL-Konto sollten nur die Privilegien gewährt werden, die für seine Zwecke erforderlich sind. Die am häufigsten verwendeten Privilegien sind:

  • ALLE PRIVILEGES, das einem Konto alle Privilegien gewährt.

  • CREATE gewährt die notwendigen Privilegien, um Datenbanken und Tabellen zu erstellen.

  • DROP gewährt die notwendigen Privilegien, um Datenbanken und Tabellen zu löschen.

  • DELETE gewährt die notwendigen Privilegien, um Zeilen aus Tabellen zu löschen.

  • INSERT gewährt die notwendigen Privilegien, um Zeilen in Tabellen einzufügen.

  • SELECT gewährt die notwendigen Privilegien, um SELECT-Abfragen auszuführen.

  • UPDATE gewährt die erforderlichen Berechtigungen, um Zeilen in einer Tabelle zu aktualisieren (um UPDATE-Abfragen auszuführen)

Im Allgemeinen ist es eine gute Idee, einem Konto nicht alle Privilegien zu gewähren; Ziehen Sie stattdessen in Erwägung, dem Prinzip der geringsten Rechte zu folgen. Denken Sie auch daran, dass das Gewähren zusätzlicher Berechtigungen für einen bestimmten Benutzer nicht die Berechtigungen entfernt, die zuvor vorhanden waren. Sie können auch die Berechtigungen eines bestimmten Benutzers anzeigen, indem Sie diese Syntax verwenden (ersetzen Sie den Benutzernamen durch den Benutzernamen Ihres Benutzers):

SHOW GRANTS FOR ‘username’;

Zusammenfassung

Beachten Sie beim Umgang mit Privilegien in MySQL, dass Sie dem Prinzip der geringsten Privilegien folgen sollten (d. h. nur die notwendigen Privilegien gewähren). Das Befolgen der Ratschläge in diesem Blog sollte Ihnen dabei helfen, Ihre MySQL-Installation sicherer zu machen. Denken Sie daran, dass Ihre Privilegien gespeichert werden müssen, damit sie wirksam werden (die FLUSH PRIVILEGES-Anweisung kann Ihnen dabei helfen). Denken Sie außerdem daran, dass Sie ab MySQL 8.0.16 Rollen in MySQL verwenden können, um einer Gruppe von Privilegien zuzuweisen bestimmten Benutzer.

Wir hoffen, dass dieser Blogbeitrag Ihnen geholfen hat, Ihre MySQL-Instanz(en) zu sichern. Wenn Sie Fragen oder Gedanken haben, zögern Sie nicht, einen Kommentar abzugeben, und ziehen Sie auch einen Blick in unsere MySQL-Sicherheitsserie (hier und hier) in Erwägung