Details zur MySQL-Sicherheitsverwaltung

Details zur MySQL-Sicherheitsverwaltung

1. Vorstellen gemäß der Bestellung

Die Sicherheit eines MySQL -Servers basiert auf dem Grundsatz, dass Benutzer genau so viel Zugriff auf die Daten haben sollten, wie sie benötigen – nicht mehr und nicht weniger.

Mit anderen Worten: Benutzer können nicht zu viel Zugriff auf zu viele Daten haben.

  • Die meisten Benutzer müssen nur Tabellen lesen und schreiben können, aber einige Benutzer müssen sogar Tabellen erstellen und löschen können.
  • Einige Benutzer müssen die Tabelle lesen, aber möglicherweise nicht aktualisieren.
  • Möglicherweise möchten Sie Benutzern das Hinzufügen von Daten gestatten, aber nicht das Löschen von Daten.
  • Einige Benutzer (Administratoren) müssen möglicherweise die Berechtigungen von Benutzerkonten verwalten, die meisten Benutzer tun dies jedoch nicht.
  • Möglicherweise möchten Sie Benutzern den Zugriff auf Daten über gespeicherte Prozeduren gestatten, ihnen jedoch keinen direkten Zugriff auf die Daten erlauben.
  • Möglicherweise möchten Sie den Zugriff auf bestimmte Funktionen basierend darauf beschränken, von wo aus der Benutzer angemeldet ist.

Dies sind nur Beispiele. Sie verdeutlichen jedoch die wichtige Tatsache, dass Sie den Benutzern den Zugriff gewähren müssen, den sie benötigen, und zwar nur den Zugriff, den sie benötigen.

Dies wird als Zugriffskontrolle bezeichnet und die Verwaltung der Zugriffskontrolle erfordert das Erstellen und Verwalten von Benutzerkonten.

Verhindern unbeabsichtigter Fehler: Es ist wichtig zu beachten, dass der Zweck der Zugriffskontrolle nicht nur darin besteht, böswillige Absichten der Benutzer zu verhindern.

Datenalpträume sind häufiger das Ergebnis unbeabsichtigter Fehler, wie z. B. einer falschen Eingabe einer MySQL-Anweisung, dem Arbeiten mit einer ungeeigneten Datenbank oder anderen Benutzerfehlern.

Zugriffskontrollen helfen, diese Situationen zu verhindern, indem sie sicherstellen, dass Benutzer keine Anweisungen ausführen können, die sie nicht ausführen sollten. Verwenden Sie keinen Root. Die Verwendung von Root-Anmeldungen sollte ernst genommen werden. Verwenden Sie es nur, wenn es unbedingt erforderlich ist (z. B. wenn Sie sich nicht bei einem anderen Administratorkonto anmelden können).

Sie sollten root nicht in alltäglichen MySQL Vorgängen verwenden.
MySQL-Benutzerkonten und -Informationen werden in einer MySQL-Datenbank namens mysql gespeichert. Im Allgemeinen benötigen Sie keinen direkten Zugriff auf mysql -Datenbanken und -Tabellen (das werden Sie später verstehen), manchmal ist es aber doch nötig. Ein direkter Zugriff ist beispielsweise dann erforderlich, wenn Sie eine Liste aller Benutzerkonten benötigen.

Verwenden Sie dazu den folgenden Code:

benutze MySQL;
WÄHLEN SIE BENUTZER AUS Benutzer;

Die mysql -Datenbank hat eine Tabelle namens user , die alle Benutzerkonten enthält.

Die Benutzertabelle hat eine Spalte namens user , in der der Benutzeranmeldename gespeichert ist. Ein neu installierter Server kann nur einen Benutzer haben (wie hier gezeigt), während ein früher erstellter Server viele Benutzer haben kann.

Experimentieren mit mehreren Clients: Die beste Möglichkeit zum Experimentieren mit Änderungen an Benutzerkonten und Berechtigungen besteht darin, mehrere Datenbankclients zu öffnen (z. B. mehrere Kopien des mysql -Befehlszeilenprogramms) und sich bei einem als Administrator und bei den anderen als der zu testende Benutzer anzumelden.

2. Benutzer anlegen

BENUTZER ben erstellen IDENTIFIZIERT durch „ben123456“;


Dadurch wird ein Benutzer erstellt.

Die Angabe eines gehashten Passworts IDENTIFIED BY gibt das Passwort als Klartext an. MySQL
Es wird verschlüsselt, bevor es in der Benutzertabelle gespeichert wird. Um das Passwort als Hash-Wert anzugeben, verwenden Sie IDENTIFIED BY PASSWORD .
Sie können Benutzerkonten auch mit den Anweisungen GRANT oder INSERT GRANT (später beschrieben) erstellen, aber CREATE USER ist im Allgemeinen die klarste und einfachste Anweisung. Darüber hinaus können Sie Benutzer auch hinzufügen, indem Sie Zeilen direkt in die Benutzertabelle einfügen. Aus Sicherheitsgründen wird dies jedoch im Allgemeinen nicht empfohlen.

Die Tabellen (und Tabellenschemata usw.), die MySQL zum Speichern von Benutzerkontoinformationen verwendet, sind äußerst wichtig, und jede Beschädigung dieser Tabellen kann dem MySQL-Server ernsthaften Schaden zufügen. Daher ist es besser, zum Verarbeiten dieser Tabellen Tags und Funktionen zu verwenden, anstatt sie direkt zu verarbeiten.

Um ein Benutzerkonto umzubenennen, verwenden Sie die Anweisung RENAME USER wie folgt:

BENENNEN SIE BENUTZER BENEN IN ZHANGSAN UM;


MySQL 5 und spätere Versionen unterstützen nur RENAME USER. Um einen Benutzer in MySQL früher umzubenennen, konnten Sie UPDATE verwenden, um die Benutzertabelle direkt zu aktualisieren.

3. Benutzerkonto löschen

DROP-BENUTZER zhangsan;


Beachten:

Vor MySQL 5. Seit MySQL 5 entfernt DROP USER ein Benutzerkonto und alle zugehörigen Kontoberechtigungen. Vor MySQL 5 konnte DROP USER nur zum Löschen von Benutzerkonten verwendet werden, nicht jedoch zum Löschen der zugehörigen Berechtigungen. Wenn Sie eine ältere Version von MySQL verwenden, müssen Sie daher zuerst mit REVOKE die mit dem Konto verknüpften Berechtigungen löschen und dann mit DROP USER das Konto löschen.

4. Zugriffsrechte

Nach dem Anlegen eines Benutzerkontos müssen Sie anschließend die Zugriffsrechte vergeben. Neu erstellte Benutzerkonten haben keine Zugriffsberechtigung. Sie können sich bei MySQL anmelden, aber weder die Daten sehen noch Datenbankoperationen durchführen.

BENUTZER zhangsan ERSTELLEN, IDENTIFIZIERT durch „zhang123456“;


Um die dem Benutzerkonto erteilten Berechtigungen anzuzeigen, verwenden Sie SHOW GRANTS FOR wie folgt:

Zuschüsse für „Zhangsan“ anzeigen;


Ergebnis:

GRANT USAGE ON *.* TO 'zhangsan'@'%' IDENTIFIZIERT DURCH PASSWORT '*557661E2A88A816A3155408E5D15997A8C5C7D25'


Es werden keine Berechtigungen angezeigt.

USAGE bedeutet überhaupt keine Berechtigungen (ich weiß, das ist nicht sehr intuitiv). Dieses Ergebnis bedeutet also: keinerlei Berechtigungen für irgendetwas, für keine Datenbank und keine Tabelle.

Benutzer werden als Benutzer@Host definiert. MySQL-Berechtigungen werden mithilfe einer Kombination aus Benutzername und Hostname definiert. Wenn Sie keinen Hostnamen angeben, wird der Standardhostname verwendet (gewähren Sie dem Benutzer unabhängig vom Hostnamen Zugriff).

Verwenden Sie zum Festlegen von Berechtigungen die GRANT-Anweisung. GRANT verlangt von Ihnen mindestens die folgenden Informationen:

  • Die zu erteilenden Berechtigungen;
  • Die Datenbank oder Tabelle, für die Zugriffsberechtigungen erteilt werden;
  • Benutzername.

Das folgende Beispiel zeigt die Verwendung von GRANT:

GRANT SELECT ON test.* an zhangsan;


Dann:

ZUSCHLÄGE FÜR ZHANGSAN ANZEIGEN;
GRANT SELECT ON `test`.* TO 'zhangsan'@'%'


Jeder GRANT fügt (oder aktualisiert) ein Privileg für einen Benutzer hinzu. MySQL liest alle Zuweisungen und ermittelt darauf basierend die Berechtigungen.

Die umgekehrte Operation zu GRANT ist REVOKE, mit der bestimmte Berechtigungen widerrufen werden. Hier ist ein Beispiel:

Auswahl beim Test widerrufen.* Von zhangsan;


Diese REVOKE-Anweisung widerruft das SELECT-Zugriffsprivileg, das dem Benutzer bforta gerade gewährt wurde. Die zu widerrufenden Zugriffsrechte müssen vorhanden sein, sonst kommt es zu einem Fehler.

GRANT und REVOKE steuern Zugriffsberechtigungen auf mehreren Ebenen:

  • Verwenden Sie für den gesamten Server GRANT ALL und REVOKE ALL.
  • Verwenden Sie für die gesamte Datenbank ON database.*;
  • Verwenden Sie für eine bestimmte Tabelle ON database.table;
  • Bestimmte Spalten;
  • Eine bestimmte gespeicherte Prozedur.

Beispiel:

ALL Alle Berechtigungen außer GRANT OPTION ALTER Verwenden Sie ALTER TABLE
ALTER ROUTINE Verwenden von ALTER PROCEDURE und DROP PROCEDURE
ERSTELLEN mit CREATE TABLE
ROUTINE ERSTELLEN mit CREATE PROCEDURE
VORÜBERGEHENDES ERSTELLEN 
TISCHE
Verwenden von CREATE TEMPORARY TABLE
CREATE USER Verwenden von CREATE USER, DROP USER, RENAME USER und REVOKE
Alle Privilegien
ANSICHT ERSTELLEN
LÖSCHEN Verwenden von LÖSCHEN
DROP mit DROP TABLE
EXECUTE Mit CALL und gespeicherter Prozedur FILE Mit SELECT INTO OUTFILE und LOAD DATA INFILE
GRANT OPTION Verwenden von GRANT und REVOKE
INDEX Verwenden von CREATE INDEX und DROP INDEX
INSERT Verwenden von INSERT
Sperrtabellen
PROZESS Verwenden von SHOW FULL PROCESSLIST
NEULADEN mit FLUSH
REPLICATION CLIENT Server-Standortzugriff REPLICATION SLAVE durch den Replikations-Slave mittels SELECT mittels SELECT
Verwenden von SHOW DATABASES
SHOW VIEW Verwenden von SHOW CREATE VIEW
SHUTDOWN Verwenden Sie mysqladmin shutdown (um MySQL herunterzufahren)
SUPER verwendet CHANGE MASTER, KILL, LOGS, PURGE, MASTER
und SET GLOBAL. Erlaube auch mysqladmin Debug-Login UPDATE Verwende UPDATE
NUTZUNG Keine Zugriffsrechte

Mit GRANT und REVOKE haben Sie die vollständige Kontrolle darüber, was Benutzer mit Ihren wertvollen Daten tun dürfen und was nicht.

Für künftige Autorisierungen mittels GRANT und REVOKE muss das Benutzerkonto vorhanden sein, für die beteiligten Objekte gibt es diese Voraussetzung jedoch nicht.

Dies ermöglicht Administratoren, Sicherheitsmaßnahmen zu entwerfen und zu implementieren, bevor sie Datenbanken und Tabellen erstellen.

Ein Nebeneffekt hiervon ist, dass beim Löschen einer Datenbank oder Tabelle (mithilfe der DROP-Anweisung) die zugehörigen Zugriffsberechtigungen weiterhin bestehen bleiben. Darüber hinaus funktionieren diese Berechtigungen auch dann noch, wenn Sie die Datenbank oder Tabelle später neu erstellen.

Sie können mehrere Berechtigungen vereinfachen, indem Sie mehrere GRANT-Anweisungen aneinanderreihen. Dazu listen Sie die einzelnen Berechtigungen auf und trennen sie durch Kommas, wie folgt:

GRANT SELECT, INSERT ON test.* an zhangsan;

5. Passwort ändern

Um das Passwort eines Benutzers zu ändern, verwenden Sie die Anweisung SET PASSWORD. Das neue Passwort muss wie folgt verschlüsselt werden:

PASSWORT FÜR zhangsan FESTLEGEN = PASSWORT('zhangsan');

Ändern Sie das Passwort des aktuellen Benutzers:

PASSWORT FESTLEGEN = PASSWORT('root');

Dies ist das Ende dieses Artikels über Details zur MySQL-Sicherheitsverwaltung. Weitere relevante Inhalte zur MySQL-Sicherheitsverwaltung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Es ist Jahresende, ist Ihr MySQL-Passwort sicher?
  • So fahren Sie MySQL sicher herunter
  • Schnelle und sichere Methode zum Umbenennen einer MySQL-Datenbank (3 Arten)
  • So beenden Sie den MySQL-Prozess ordnungsgemäß und sicher
  • Einige Vorschläge zur Gewährleistung der MySQL-Datensicherheit
  • So fahren Sie eine MySQL-Instanz sicher herunter

<<:  So entfernen Sie Inline-Stile, die durch das Stilattribut (element.style) definiert sind

>>:  CSS-Beschreibung des Implementierungscodes zur Anzeige von Text am Ende des horizontalen Fortschrittsbalkens

Artikel empfehlen

Grafische Erklärung des Funktionsaufrufs der Protodatei in Vue

1. Proto kompilieren Erstellen Sie einen neuen Pr...

Docker-Container greift auf MySQL-Operationen des Hosts zu

Hintergrund: Es gibt ein Flask-Projekt, das eine ...

So verwenden Sie ein Domestic Image Warehouse für Docker

1. Problembeschreibung Aus bestimmten Gründen ist...

Detaillierte Erklärung des einfachen Stores von Vue

Die einfachste Store-Anwendung in Vue ist die glo...

Lösung für vergessenes Linux MySQL-Root-Passwort

Wenn Sie sich bei der Verwendung der MySQL-Datenb...

Implementierungsmethode des Nginx+Tomcat-Lastausgleichsclusters

Die experimentelle Umgebung ist wie folgt Hier mü...

Zusammenfassung der Wissenspunkte zu den Linux-Befehlen ps und pstree

Der ps-Befehl in Linux ist die Abkürzung für „Pro...

Detaillierte Erläuterung gängiger MySQL-Befehle im Linux-Terminal

Aufschlag: # chkconfig --list Alle Systemdienste ...

Hinweise zur Verwendung der verknüpften Liste des Linux-Kernel-Gerätetreibers

/******************** * Anwendung von verknüpften...

Lösung für EF (Entity Framework)-Einfüge- oder Aktualisierungsfehler

Fehlermeldung: Die Store-Update-, Insert- oder De...