Eine kurze Diskussion über die Matching-Regeln von Host und Benutzer, wenn Mysql eine Verbindung zur Datenbank herstellt

Eine kurze Diskussion über die Matching-Regeln von Host und Benutzer, wenn Mysql eine Verbindung zur Datenbank herstellt

--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:
  • So legen Sie die Anzahl der MySQL-Verbindungen fest und ermitteln sie
  • Drei Möglichkeiten, PHP mit einer MySQL-Datenbank zu verbinden
  • So stellen Sie mit Navicat Premium eine Remoteverbindung zur MySQL-Datenbank her
  • Detaillierte Schritte zur Verwendung von IDEA zum Konfigurieren von Tomcat und Herstellen einer Verbindung mit einer MySQL-Datenbank (JDBC)
  • Detaillierte Erklärung der Verbindung von DBeaver zu MySQL Version 8 und höher und Lösung möglicher Probleme
  • Lösung für den Fehler bei der Verbindung mit MySQL in Docker
  • Beheben Sie das Problem des Fehlers 10038 bei der Remoteverbindung mit MySQL in Navicat
  • Allgemeiner PHP-Code zum Verbinden, Lesen und Schreiben in MySQL-Datenbanken
  • Detaillierte Erläuterung der Remoteverbindung zur MySQL-Autorisierungsmethode
  • So stellen Sie in C# eine Verbindung zur MySql-Datenbank her
  • Die unangemessenen MaxIdleConns von MySQL führen zu kurzen Verbindungen

<<:  Tutorial zur HTML-Tabellenauszeichnung (29): Farbattribut für helle Zellenränder BORDERCOLORLIGHT

>>:  Docker-Zeitzonenproblem und Datenmigrationsproblem

Artikel empfehlen

Detaillierte Erklärung der Listendarstellung von Vue

Inhaltsverzeichnis 1. v-for: Array-Inhalte durchl...

Linux löscht automatisch Protokolle und Beispielbefehle von vor n Tagen

1. Befehl zum Löschen von Dateien: Suche das ents...

Vue implementiert eine Zeit-Countdown-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

Implementierung einer Fuzzy-Abfrage wie %% in MySQL

1, %, steht für beliebige 0 oder mehr Zeichen. Es...

MySQL-Serververbindung, Trennung und cmd-Bedienung

Verwenden Sie den Befehl mysql, um eine Verbindun...

Detaillierte Schritte zum Löschen von Umgebungsvariablen in Linux

Wie lösche ich Umgebungsvariablen unter Linux? Ve...

Detaillierte Erklärung des JS-Browserspeichers

Inhaltsverzeichnis Einführung Plätzchen Was sind ...

11 Gründe, warum Bootstrap so beliebt ist

Vorwort Bootstrap, das beliebteste Front-End-Entw...

Umfassendes Verständnis der HTML-Grundstruktur

Einführung in HTML HyperText-Auszeichnungssprache...

Die v-for-Direktive in Vue vervollständigt die Listendarstellung

Inhaltsverzeichnis 1. Listendurchlauf 2. Die Roll...

Einige Parameterbeschreibungen von Texteingabefeldern im Webdesign

In Gästebüchern, Foren und anderen Orten werden i...