Tipp: In MySQL müssen wir häufig Benutzer erstellen und löschen. Beim Erstellen von Benutzern verwenden wir im Allgemeinen die Anweisungen „create user“ oder „grant“, um sie zu erstellen. Mit der Syntax „create“ erstellte Benutzer haben keine Berechtigungen, und Sie müssen die Syntax „grant“ verwenden, um Berechtigungen zuzuweisen. Mit der Syntax „grant“ erstellte Benutzer haben direkt die zugewiesenen Berechtigungen. Nachdem einige Testbenutzer erstellt und getestet wurden, kann der Lebenszyklus des Benutzers enden und der Benutzer muss gelöscht werden. Es gibt im Allgemeinen zwei Möglichkeiten, Benutzer in MySQL zu löschen: eine ist aus mysql.user löschen Sehen wir uns zunächst mysql 15:13:12>>Benutzer yeyz@'%' erstellen, identifiziert durch '123456'; Abfrage OK, Zeilen betroffen (. Sek.) mysql 15:20:01>>gewähre yeyz@'%' die Berechtigungen „Auswählen, Erstellen, Aktualisieren, Löschen“ für yeyz.yeyz; Abfrage OK, Zeilen betroffen (. Sek.) mysql 15:29:48>>GRANT USAGE ON yeyz.yeyz TO 'yeyz'@localhost IDENTIFIZIERT DURCH '123456'; Abfrage OK, Zeilen betroffen (. Sek.) [email protected]:(keine) 15:20:39>>Berechtigungen für yeyz@'%' anzeigen; +------------------------------------------------------------------------------------------------------------------+ | Zuschüsse für yeyz@% | +------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* AN 'yeyz'@'%' IDENTIFIZIERT DURCH PASSWORT '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' | | GRANT SELECT, UPDATE, DELETE, CREATE ON `yeyz`.`yeyz` TO 'yeyz'@'%' | +------------------------------------------------------------------------------------------------------------------+ An diesem Punkt löschen wir die beiden Benutzer manuell in der Tabelle mysql.user, indem wir die Methode delete verwenden. Wenn wir die Benutzertabelle überprüfen, finden wir: mysql 15:20:43>>löschen aus mysql.user, wobei Benutzer='yeyz'; Abfrage OK, Zeilen betroffen (. Sek.) mysql 15:21:40>>Benutzer, Host aus mysql.user auswählen; +------------------+-----------------+ | Benutzer | Gastgeber | +------------------+-----------------+ | dba_yeyz | lokaler Host | | Stammverzeichnis | lokaler Host | | tkadmin | lokaler Host | +------------------+-----------------+ Zeilen im Set (.sec) Es sind keine yeyz-Benutzer mehr vorhanden. Wir verwenden den Befehl „show grants for“, um den Benutzer anzuzeigen, den wir gerade gelöscht haben, und stellen fest, dass die Berechtigungsbeschreibung dieses Benutzers noch vorhanden ist: mysql 15:24:21>>Berechtigungen für yeyz@'%' anzeigen; +------------------------------------------------------------------------------------------------------------------+ | Zuschüsse für yeyz@% | +------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* AN 'yeyz'@'%' IDENTIFIZIERT DURCH PASSWORT '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' | | GRANT SELECT, UPDATE, DELETE, CREATE ON `yeyz`.`yeyz` TO 'yeyz'@'%' | +------------------------------------------------------------------------------------------------------------------+ Zeilen im Set (0,00 Sek.) Dies bedeutet, dass dieser Benutzer, obwohl wir ihn aus der Tabelle mysql.user gelöscht haben, immer noch in der Datenbanktabelle und der Berechtigungstabelle vorhanden ist. Um diese Schlussfolgerung zu überprüfen, erstellen wir einen neuen Benutzer mit dem Namen yeyz@localhost. Wir erteilen diesem Benutzer nur Nutzungsberechtigungen und konfigurieren keine anderen Berechtigungen, und zwar wie folgt: mysql ::>>GRANT USAGE ON yeyz.yeyz TO 'yeyz'@localhost IDENTIFIZIERT DURCH '123456'; Abfrage OK, Zeilen betroffen (. Sek.) Zu diesem Zeitpunkt verwenden wir den Benutzer yeyz@localhost, um uns beim Datenbankdienst anzumelden, und führen dann die entsprechenden Aktualisierungsvorgänge wie folgt durch: [dba_mysql@tk-dba-mysql-stat-- ~]$ /usr/local/mysql/bin/mysql -uyeyz --socket=/data/mysql_4306/tmp/mysql.sock --port= -p -hlocalhost Passwort eingeben: Willkommen beim MySQL-Monitor. Befehle enden mit ; oder \g. Ihre MySQL-Verbindungs-ID lautet Serverversion: 5.5.-log MySQL Community Server (GPL) Copyright (c) , , Oracle und/oder seine Tochtergesellschaften. Alle Rechte vorbehalten. Oracle ist eine eingetragene Marke der Oracle Corporation und/oder ihrer Tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen Eigentümer. Geben Sie „help;“ oder „\h“ ein, um Hilfe zu erhalten. Geben Sie „\c“ ein, um die aktuelle Eingabeanweisung zu löschen. mysql--yeyz@localhost:(keine) 15:31:05>>wählen Sie * aus yeyz.yeyz; +------+ |Ich würde| +------+ | 3 | | 4 | | 5 | +------+ Zeilen im Set (.sec) mysql--yeyz@localhost:(keine) 15:31:16>>löschen aus yeyz.yeyz, wobei id=; Abfrage OK, Zeile betroffen (. Sek.) mysql--yeyz@localhost:(keine) 15:31:32>>Wählen Sie * aus yeyz.yeyz; +------+ |Ich würde| +------+ | 3 | | 4 | +------+ Zeilen im Set (.sec) Das Endergebnis ist vorhersehbar. Ein Benutzer mit Nutzungsberechtigung hat einen Aktualisierungsvorgang für die Datenbanktabelle durchgeführt und dieser war erfolgreich. All dies ist unserem Vorgang „Löschen aus mysql.user“ zu verdanken. Obwohl dieser Vorgang den Datensatz aus der Benutzertabelle löscht, erbt der neue Benutzer, wenn der Host dieses Datensatzes % ist und ein neuer Benutzer mit demselben Namen erstellt wird, die Berechtigungen des vorherigen Benutzers, wodurch die Benutzerberechtigungssteuerung ungültig wird. Dies ist ein sehr gefährlicher Vorgang und sollte so weit wie möglich vermieden werden. Öffnen Sie es erneut und sehen Sie, wie Sie einen Benutzer mit der Drop-Methode löschen Zuerst löschen wir die beiden Benutzer und verwenden dann die Anweisung „show grants for“, um ihre Berechtigungen anzuzeigen: mysql ::>>Benutzer yeyz@'%' löschen; Abfrage OK, Zeilen betroffen (0,00 Sek.) mysql ::>>Benutzer yeyz@'localhost' löschen; Abfrage OK, Zeilen betroffen (0,00 Sek.) MySQL ::>> mysql ::>>Berechtigungen für yeyz@'%' anzeigen; FEHLER (): Für den Benutzer „yeyz“ auf dem Host „%“ ist keine solche Berechtigung definiert. mysql ::>>Zugriffsrechte für yeyz@'localhost' anzeigen; FEHLER (): Für den Benutzer „yeyz“ auf dem Host „192.168.18.%“ ist keine solche Berechtigung definiert. Wie man sieht, wurden die Berechtigungen komplett gelöscht. Nun erstellen wir einen Benutzer mit nur ausgewählten Berechtigungen neu: mysql ::>>GRANT SELECT ON *.* TO 'yeyz'@'localhost' IDENTIFIZIERT DURCH PASSWORT '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'; Abfrage OK, Zeilen betroffen (. Sek.) Wir verwenden diesen Benutzer, um uns beim Datenbankdienst anzumelden, und versuchen dann, Auswahl-, Aktualisierungs- und Erstellungsvorgänge auszuführen. Die Ergebnisse sind wie folgt: [dba_mysql@tk-dba-mysql-stat-10-104 ~]$ /usr/local/mysql/bin/mysql -uyeyz --socket=/data/mysql_4306/tmp/mysql.sock --port=4306 -p -hlocalhost Passwort eingeben: Willkommen beim MySQL-Monitor. Befehle enden mit ; oder \g. Ihre MySQL-Verbindungs-ID lautet Serverversion: 5.5.19-log MySQL Community Server (GPL) Copyright (c) , , Oracle und/oder seine Tochtergesellschaften. Alle Rechte vorbehalten. Oracle ist eine eingetragene Marke der Oracle Corporation und/oder ihrer Tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen Eigentümer. Geben Sie „help;“ oder „\h“ ein, um Hilfe zu erhalten. Geben Sie „\c“ ein, um die aktuelle Eingabeanweisung zu löschen. mysql ::>>wählen Sie * aus yeyz.yeyz; +------+ |Ich würde| +------+ | | | | | | +------+ Zeilen im Set (0,00 Sek.) mysql ::>>update yeyz.yeyz setze id= wobei id=; FEHLER (): UPDATE-Befehl für Benutzer „yeyz“@„localhost“ für Tabelle „yeyz“ abgelehnt mysql ::>>Tabellentest erstellen (ID int); FEHLER (D000): Keine Datenbank ausgewählt mysql ::>>Tabelle erstellen yeyz.test (id int); FEHLER (): CREATE-Befehl für Benutzer „yeyz“@„localhost“ für Tabelle „test“ verweigert Es lässt sich feststellen, dass dieser Benutzer nur Auswahlvorgänge ausführen kann. Wenn wir versuchen, Aktualisierungs- und Erstellungsvorgänge auszuführen, stellt das System fest, dass für solche Vorgänge keine Berechtigung vorliegt, und lehnt sie direkt ab. Dies bedeutet, dass beim Löschen eines Benutzers mit der Methode „Drop User“ die Datenbanktabelle und die Berechtigungstabelle gemeinsam gelöscht werden. Mit anderen Worten, die Löschung ist relativ sauber und hat keine Auswirkungen auf zukünftige Benutzer. abschließend: Wenn wir einen Benutzer löschen möchten, versuchen Sie, die Methode „Drop User“ zu verwenden. Die Verwendung der Löschmethode kann versteckte Gefahren bergen. Wenn Sie beim nächsten Mal einen Benutzer mit demselben Namen erstellen, treten bestimmte Probleme mit der Berechtigungskontrolle auf. Diese Demonstration beantwortet auch die Frage einiger unerfahrener Freunde: Warum kann mein Benutzer, der nur über Nutzungsberechtigungen verfügt, auf alle Datenbanken zugreifen und Vorgänge darauf ausführen? Zu diesem Zeitpunkt müssen Sie das Protokoll überprüfen, um festzustellen, ob Sie den Vorgang zum Löschen aus mysql.user ausgeführt haben. Wenn ja, ist dieses Problem leicht zu erklären. Oben ist der detaillierte Inhalt des Unterschieds zwischen den beiden MySQL-Benutzerlöschanweisungen (Benutzer löschen und Benutzer löschen) aufgeführt. Weitere Informationen zum Löschen von MySQL-Benutzern finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Prinzipanalyse des UDP-Verbindungsobjekts und Anwendungsbeispiele
>>: Die spezifische Verwendung und der Unterschied zwischen Attribut und Eigenschaft in Vue
Welchen Parameter verwendet der RPM-Befehl zum In...
Dieser Artikel veranschaulicht anhand eines Beisp...
Schritt 1: Signieren Sie ein vertrauenswürdiges S...
Vorwort In vielen MySQL-Test-Szenarien müssen ein...
Einen Fehler melden Der Apache\Nginx-Dienst wurde...
Was ist JDK? Nun, wenn Sie diese Frage nicht kenn...
Originalcode: center.html : <!DOCTYPE html>...
Problembeschreibung: Der Benutzer hat die Anforde...
In diesem Artikel wird der spezifische Code von V...
Unabhängig davon, ob Sie ein Windows- oder Linux-...
Verwenden Sie Code Cloud, um ein Git-Code-Speiche...
Dieser Artikel stellt hauptsächlich die dynamisch...
<br />Die Lösungsschritte sind wie folgt: St...
Pseudo-Arrays und Arrays In JavaScript sind mit A...
Zwei Möglichkeiten zum Navigieren auf der Seite D...