GOOGLE ADS

Mittwoch, 13. April 2022

Wie erstelle ich eine Verbindungszeichenfolge ohne Anmeldeinformationen .net MySqlConnector/Pomelo.EntityFrameworkCore.MySql?

Ich suche nach einer Lösung, um die Verbindungszeichenfolge ohne Benutzernamen und Passwort zu verwenden, die mit dem MariaDB-Server angegeben sind. Ich führe App und DB-Server auf demselben Computer aus, daher habe ich mich für die Verwendung der unix_socket-Authentifizierung entschieden.

Schritte zum Reproduzieren

Ich habe zwei Verbindungszeichenfolgen, bei denen für keine Variante eine Kennworteigenschaft angegeben ist:

a)

string cnn_str = @" 
Server=/run/mysqld/mysqld.sock;
Port=3306;
Database=mwsdb;
Protocol=unix;
AllowUserVariables=true;
UseAffectedRows=false;";

b) Variante ist die gleiche wie die erste, nur erweitert um die uidEigenschaft (inspiriert durch Ausnahme)

// appends user name - user that runs the application
// in my case the user name is 'pi'
cnn_str += $"Uid={Environment.UserName};";

Code zum Verbinden mit der Datenbank:

1) NurMySqlConnector

var connection = new MySqlConnection(cnn_str);
using (connection)
{
connection.Open();
}

2) Die Art und Weise, wie ich den DB-Kontextdienst bei der Program.csVerwendung von Pomelo.EFand konfiguriere.UseMySql()

builder.Services.AddDbContext<MwsDbContext>(dbContextOptions => dbContextOptions
/* either 2.1) */.UseMySql(cnn_str, ServerVersion.AutoDetect(cnn_str))
/* or 2.2) */ //.UseMySql(new MySqlConnection(cnn_str), ServerVersion.AutoDetect(cnn_str))
);

Die Angelegenheit

Ich habe einfachen Code (Konsolen-App) verwendet, um die Konnektivität zu MariaDB zu testen und die Ergebnisse in eine Tabelle einzufügen.









































CodeVerbindungszeichenfolgeErgebnis
eina)Ausnahme
einb)funktioniert
2.1a)Ausnahme
2.1b)funktioniert
2.2a)Ausnahme
2.2b)funktioniert

Lösung des Problems

Kann ich eine Verbindungszeichenfolge ohne Anmeldeinformationen erstellen?

Nein. MySqlConnector erfordert die Angabe der Benutzer-ID, selbst wenn ein Unix-Socket verwendet wird. Dies wird in dieser Ausgabe behandelt.

Die Problemumgehung besteht darin, den Benutzernamen explizit festzulegen:

var builder = new MySqlConnectionStringBuilder("...connection string...");
builder.UserID = Environment.UserName;
using var connection = new MySqlConnection(builder.ConnectionString);

(Oder einfach ;Username = piin Ihrer Verbindungszeichenfolge fest codieren.)

Erklären Sie mir, welche Vor- und potenziellen Nachteile eine MySqlConnectionInstanz gegenüber der Verbindungszeichenfolge hat, wenn sie als Argument an übergeben wird .UseMySql(cnn_str vs. MySqlConnection).

Die beiden Methoden scheinen ziemlich gleichwertig zu sein: Verbindungszeichenfolge vs connection.

Man verwendet die bereitgestellte Verbindungszeichenfolge; der andere liest die DbConnection.ConnectionStringEigenschaft und verwendet diese Verbindungszeichenfolge. Ersteres wäre etwas effizienter, da es kein zusätzliches MySqlConnectionObjekt erstellt, nur um die Verbindungszeichenfolge zu übergeben; Dies ist in der Praxis wahrscheinlich vernachlässigbar.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...