--Beim Verbinden mit der Datenbank die Matching-Regeln von Host und Benutzer Offizielle Dokumentation: https://dev.mysql.com/doc/refman/5.7/en/connection-access.html --Die Übereinstimmungsregeln für Host und Benutzer lauten wie folgt:--Wenn der Host eindeutig ist, wird er zuerst abgeglichen. Wenn der Host mit % mehrdeutig ist, wird er zuletzt abgeglichen. Wenn der Host jedoch '' (leer) ist, wird er nach % abgeglichen. --Wenn die Hosts gleich sind, wird der Benutzer mit dem eindeutigen Namen zuerst abgeglichen, und der Benutzer mit '' (leer) wird zuletzt abgeglichen --Wenn Host und Benutzer identisch sind, ist die Sortierung unsicher Wenn mehrere Übereinstimmungen möglich sind, muss der Server bestimmen, welche davon verwendet werden sollen. Dieses Problem wird folgendermaßen gelöst: Immer wenn der Server die Benutzertabelle in den Speicher liest, sortiert er die Zeilen. Wenn ein Client versucht, eine Verbindung herzustellen, durchsucht der Server die Zeilen in sortierter Reihenfolge. Der Server verwendet die erste Zeile, die mit dem Hostnamen und dem Benutzernamen des Clients übereinstimmt. Der Server verwendet Sortierregeln, die Zeilen mit den spezifischsten Host-Werten zuerst sortieren. Wörtliche Hostnamen und IP-Adressen sind am spezifischsten. (Die Spezifität einer wörtlichen IP-Adresse wird nicht davon beeinflusst, ob sie eine Netzmaske hat, daher werden 198.51.100.13 und 198.51.100.0/255.255.255.0 als gleich spezifisch angesehen.) Das Muster '%' bedeutet „jeder Host“ und ist am wenigsten spezifisch. Die leere Zeichenfolge '' bedeutet auch „jeder Host“, wird aber nach '%' sortiert. Zeilen mit demselben Host-Wert werden mit den spezifischsten Benutzerwerten zuerst sortiert (ein leerer Benutzerwert bedeutet „jeder Benutzer“ und ist am wenigsten spezifisch). Für Zeilen mit gleich spezifischen Host- und Benutzerwerten ist die Reihenfolge nicht deterministisch. --Überprüfen Sie die aktuelle Übereinstimmungsreihenfolge der Host- und Benutzerinformationen. Zuerst die Übereinstimmung der Hostreihenfolge, dann die Übereinstimmung der Benutzerreihenfolge. mysql> SELECT Authentifizierungszeichenfolge, Host, Benutzer, Konto gesperrt FROM mysql.USER ORDER BY Hostbeschreibung, Benutzerbeschreibung; +-------------------------------------------+--------------+---------------+----------------+ | Authentifizierungszeichenfolge | Host | Benutzer | Konto gesperrt | +-------------------------------------------+--------------+---------------+----------------+ | *511C0A408C5065XXEC90D60YYA1AB9437281AF28 | lokaler Host | root | N | | *DIES IST NICHT GÜLTIG, DANN KANN DAS WORT HIER VERWENDET WERDEN | localhost | mysql.sys | Y | | *DIES IST NICHT GÜLTIG, DA DAS WORT JEDOCH HIER VERWENDET WERDEN KANN | localhost | mysql.session | Y | | *485CE31BA547A4XXC047659YY10DF200F361CD4E | lokaler Host | bkpuser | N | | *7B502777D8FF69XX4B56BC2YY2867F4B47321BA8 | 192.168.56.% | ersetzen | N | | *AECCE73463829AXX3968838YYF6F85E43C3F169C | % | flyremote | N | | *566AC8467DAAAEXXE247AE7YY0A770E9B97D9FB0 | | flylocal | N | +-------------------------------------------+--------------+---------------+----------------+ 8 Zeilen im Satz (0,00 Sek.) --Lassen Sie mich Ihnen ein besonderes Beispiel geben. --Erstellen Sie zwei spezielle Benutzer wie folgt, einen mit dem Benutzernamen „“ (leer) und einen mit Benutzername und Host „“ (leer) mysql> Benutzer ''@'localhost' erstellen, identifiziert durch "Kong123$"; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> Benutzer ''@'' erstellen, identifiziert durch „doubleKong123$“; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) --Überprüfen Sie die aktuelle Übereinstimmungsreihenfolge der Host- und Benutzerinformationen. Zuerst die Übereinstimmung der Hostreihenfolge, dann die Übereinstimmung der Benutzerreihenfolge. mysql> SELECT Authentifizierungszeichenfolge, Host, Benutzer, Konto gesperrt FROM mysql.USER ORDER BY Hostbeschreibung, Benutzerbeschreibung; +-------------------------------------------+--------------+---------------+----------------+ | Authentifizierungszeichenfolge | Host | Benutzer | Konto gesperrt | +-------------------------------------------+--------------+---------------+----------------+ | *511C0VVV8C5065CBEC90D6TTTT1AB9437281AF28 | lokaler Host | root | N | | *DIESES GÜLTIGE PASSWORT KANN HIER VERWENDET WERDEN | localhost | mysql.sys | Y | | *DIESES GÜLTIGE PASSWORT KANN HIER VERWENDET WERDEN | localhost | mysql.session | Y | | *485CEVVVA547A48CC04765TTTT0DF200F361CD4E | lokaler Host | bkpuser | N | | *256D7VVV91F7363EBDADEFTTTTB74B2B318746FC | lokaler Host | | N | | *7B502VVVD8FF69164B56BCTTTT867F4B47321BA8 | 192.168.56.% | ersetzen | N | | *AECCEVVV63829A5F396883TTTT6F85E43C3F169C | % | flyremote | N | | *566ACVVV7DAAAE79E247AETTTTA770E9B97D9FB0 | | flylocal | N | | *AE162VVV68403D1D98A4C9TTTT50A508B8C56F3F | | | N | +-------------------------------------------+--------------+---------------+----------------+ 9 Zeilen im Satz (0,00 Sek.) --Auf diese Weise wird beim lokalen Anmelden beim Flyremote-Benutzer ein Fehler gemeldet, da in der obigen Reihenfolge zuerst der Benutzer mit dem Host „localhost“ und dem Benutzer „“ (leer) abgeglichen wird und nicht der Flyremote-Benutzer (da der Benutzer mit dem Benutzer „“ (leer) mit jedem Benutzernamen abgeglichen werden kann). [root@hostmysql-m mysql]# mysql -uflyremote -pFlyremote123$ mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. FEHLER 1045 (28000): Zugriff für Benutzer „flyremote“@„localhost“ verweigert (mit Passwort: JA) --Das heißt, wenn Sie sich lokal beim Benutzer flyremote anmelden, können Sie sich normal mit dem übereinstimmenden Host als localhost, dem Benutzer als '' (leer) und dem Kennwort Kong123$ anmelden. [root@hostmysql-m mysql]# mysql -uflyremote -pKong123$ mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. Willkommen beim MySQL-Monitor. Befehle enden mit ; oder \g. Ihre MySQL-Verbindungs-ID ist 15 Serverversion: 5.7.23-log MySQL Community Server (GPL) Copyright (c) 2000, 2018, 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. --Zeigen Sie die aktuelle Benutzerverbindungsmethode und die aktuelle Benutzerauthentifizierungsmethode an mysql> Benutzer auswählen(), AKTUELLER_BENUTZER(); +---------------------+----------------+ | Benutzer() | AKTUELLER_BENUTZER() | +---------------------+----------------+ | flyremote@localhost | @localhost | +---------------------+----------------+ 1 Zeile im Satz (0,06 Sek.) --Es gibt kein Problem beim Anmelden beim Flyremote-Benutzer durch Importieren der IP, die IP stimmt mit % überein und der Benutzer stimmt mit Flyremote überein [root@hostmysql-m mysql]# mysql -uflyremote -pFlyremote123$ -h127.11.22.33 mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. Willkommen beim MySQL-Monitor. Befehle enden mit ; oder \g. Ihre MySQL-Verbindungs-ID ist 12 Serverversion: 5.7.23-log MySQL Community Server (GPL) Copyright (c) 2000, 2018, 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> --Zeigen Sie die aktuelle Benutzerverbindungsmethode und die aktuelle Benutzerauthentifizierungsmethode an mysql> Benutzer auswählen(), AKTUELLER_BENUTZER(); +------------------------+----------------+ | Benutzer() | AKTUELLER_BENUTZER() | +------------------------+----------------+ | [email protected] | flyremote@% | +------------------------+----------------+ 1 Zeile im Satz (0,00 Sek.) --Jeder Benutzer, jeder Host, solange das Passwort mit dem Passwort des zweiten leeren Benutzers und leeren Hosts "doubleKong123$" übereinstimmt, können Sie MySQL eingeben --Testen Sie einen nicht vorhandenen Benutzer, hahaha [root@hostmysql-m ~]# mysql -uhahaha -pdoubleKong123$ -h127.11.22.33 mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. Willkommen beim MySQL-Monitor. Befehle enden mit ; oder \g. Ihre MySQL-Verbindungs-ID ist 6 Serverversion: 5.7.23-log MySQL Community Server (GPL) Copyright (c) 2000, 2018, 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> --Zeigen Sie die aktuelle Benutzerverbindungsmethode und die aktuelle Benutzerauthentifizierungsmethode an mysql> Benutzer auswählen(), AKTUELLER_BENUTZER(); +---------------------+----------------+ | Benutzer() | AKTUELLER_BENUTZER() | +---------------------+----------------+ | [email protected] | @ | +---------------------+----------------+ 1 Zeile im Satz (0,01 Sek.) --Lösung:1. Löschen Sie leere Benutzer und leere Hostbenutzer manuell, um die Sicherheit zu gewährleisten oder 2. Verwenden Sie mysql_secure_installation für die Sicherheitskonfiguration --Die Sicherheitskonfiguration ist wie folgt und umfasst das Löschen anonymer Benutzer Mit diesem Programm können Sie die Sicherheit Ihrer MySQL-Installation auf folgende Weise verbessern: Sie können für Root-Konten ein Passwort festlegen. Sie können Root-Konten entfernen, auf die von außerhalb des lokalen Hosts zugegriffen werden kann. Sie können anonyme Benutzerkonten entfernen. Sie können die Testdatenbank (auf die standardmäßig alle Benutzer, auch anonyme Benutzer, zugreifen können) sowie Berechtigungen entfernen, die jedem den Zugriff auf Datenbanken gestatten, deren Namen mit „test_“ beginnen. --Löschen Sie den anonymen Benutzerquellcode mysql_secure_installation.cc wie folgt: //Anonyme Benutzer entfernen anonyme_Benutzer entfernen(); /** Entfernt alle anonymen Benutzer zur besseren Sicherheit. */ ungültige remove_anonymous_users() { int-Antwort; reply = get_response((const char *) "Standardmäßig hat eine MySQL-Installation eine " "anonymer Benutzer,\nder jedem das Anmelden erlaubt" "in MySQL, ohne einen Benutzer zu haben" "Konto für sie erstellt. Dies ist beabsichtigt " "nur zum\nTesten und um die " "Die Installation sollte etwas reibungsloser ablaufen.\nDas sollten Sie" "Entfernen Sie sie, bevor Sie in eine Produktion wechseln\n" "Umgebung.\n\nAnonyme Benutzer entfernen? " "(Drücken Sie y|Y für Ja, eine beliebige andere Taste für Nein): ", 'y'); wenn (Antwort == (int) 'y' || Antwort == (int) 'Y') { const char *Abfrage; Abfrage = "SELECT USER, HOST FROM mysql.user WHERE USER = ''"; wenn (!execute_query(&query, strlen(query))) DBUG_PRINT("info", ("Abfrage erfolgreich!")); MYSQL_RES *Ergebnis = mysql_store_result(&mysql); wenn (Ergebnis) drop_users(Ergebnis); mysql_free_result(Ergebnis); fprintf(stdout, "Erfolgreich.\n\n"); } anders fprintf(stdout, "\n ... überspringen.\n\n"); } Ergänzung: Matching-Regeln für mehrere Hosts in der MySQL-Benutzertabelle Das Hostfeld der Benutzertabelle in der MySQL-Datenbank wird verwendet, um die „Berechtigung“ des Benutzers zum Zugriff auf die Datenbank zu steuern. Sie können „%“ verwenden, um alle Netzwerksegmente anzuzeigen. Sie können auch eine bestimmte IP-Adresse verwenden, was bedeutet, dass sich nur Clients mit dieser IP-Adresse beim MySQL-Server anmelden können. Sie können „_“ auch für Fuzzy-Matching verwenden, um anzuzeigen, dass sich Clients in einem bestimmten Netzwerksegment beim MySQL-Server anmelden können. Wenn für einen Benutzer zwei Datensätze mit unterschiedlichen Hostwerten in der Benutzertabelle vorhanden sind, wie gleicht der MySQL-Server die Berechtigungen des Benutzers ab? Die von MySQL verwendete Strategie besteht darin, dass der Server beim Lesen der Benutzertabelle zuerst nach dem spezifischsten Hostwert sortiert (Hostname und IP-Nummer sind am spezifischsten). Einträge mit demselben Host-Wert werden zuerst dem spezifischsten Benutzer zugeordnet. Beispiel:Wie unten gezeigt, gibt es zwei Root-Benutzer, sodass sich nur der Root-Client von localhost beim MySQL-Server anmelden kann. | root | lokaler Host | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | Wurzel | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur. Das könnte Sie auch interessieren:
|
>>: Docker-Zeitzonenproblem und Datenmigrationsproblem
Inhaltsverzeichnis 1. v-for: Array-Inhalte durchl...
1. Befehl zum Löschen von Dateien: Suche das ents...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Änderungen an der Rendering-AP...
Installieren Sie die neueste stabile Version von ...
1, %, steht für beliebige 0 oder mehr Zeichen. Es...
Verwenden Sie den Befehl mysql, um eine Verbindun...
Wie lösche ich Umgebungsvariablen unter Linux? Ve...
Inhaltsverzeichnis Einführung Plätzchen Was sind ...
Vorwort Bootstrap, das beliebteste Front-End-Entw...
Einführung in HTML HyperText-Auszeichnungssprache...
Der folgende Code führt MySQL ein, um einige Feld...
Als absoluter Neuling habe ich gerade angefangen,...
Inhaltsverzeichnis 1. Listendurchlauf 2. Die Roll...
In Gästebüchern, Foren und anderen Orten werden i...