MySQL-Verbindungsfehler: „Abruf des öffentlichen Schlüssels ist nicht zulässig“
Beim Versuch, mit Javas MySQL Connector 8.0 eine Verbindung zu einer MySQL-Datenbank herzustellen. 11 kann die folgende Ausnahme auftreten:
java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
Dieser Fehler weist darauf hin, dass der Client versucht, Daten abzurufen den öffentlichen Schlüssel vom Server, aber die Verbindung wurde nicht so konfiguriert, dass dies zulässig ist.
Lösung
Um das Problem zu beheben, müssen Sie „allowPublicKeyRetrieval=true“ hinzufügen Client-Option zu Ihrer Verbindungszeichenfolge hinzufügen. Dadurch kann der Client automatisch den öffentlichen Schlüssel vom Server anfordern. Es ist jedoch wichtig zu beachten, dass das Festlegen dieser Option auf „true“ einem böswilligen Proxy ermöglichen könnte, einen MITM-Angriff durchzuführen, um an das Klartextkennwort zu gelangen.
Beispiel für einen Verbindungsmanager mit AllowPublicKeyRetrieval
Der folgende Codeausschnitt aktualisiert die getConnection-Methode in Ihrer ConnectionManager-Klasse, um den AllowPublicKeyRetrieval einzuschließen Option:
<code class="java">public static Connection getConnection() throws SQLException { MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setUseSSL(false); dataSource.setServerTimezone(serverTimeZone); dataSource.setServerName(serverName); dataSource.setDatabaseName(databaseName); dataSource.setPortNumber(portNumber); dataSource.setUser(user); dataSource.setPassword(password); dataSource.setAllowPublicKeyRetrieval(true); // Allow public key retrieval return dataSource.getConnection(); }</code>
Zusätzlicher Hinweis
Zu Test- oder Entwicklungszwecken können Sie auch erwägen, SSL zu deaktivieren, indem Sie useSSL=false festlegen, wie in der bereitgestellten Lösung vorgeschlagen:
<code class="java">jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false</code>
Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldung „Das Abrufen des öffentlichen Schlüssels ist nicht zulässig', wenn ich mit Java eine Verbindung zu MySQL herstelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!