如何在没有登录凭据的情况下编写连接字符串.net MySqlConnector/Pomelo.EntityFramewo



我正在寻找使用MariaDB服务器指定的不带用户名和密码的连接字符串的解决方案。我在同一台机器上运行应用程序和数据库服务器,所以我决定使用unix_socket身份验证。

复制步骤

我有两个连接字符串,其中两个变量都没有指定密码属性:

a(

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

b(变体与第一个变体相同,仅扩展了uid属性(因异常而受损(

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

连接到数据库的代码

1(MySqlConnector

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

2(如何使用Pomelo.EF.UseMySql()Program.cs中配置数据库上下文服务

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))
);

问题

我使用简单的代码(控制台应用程序(来测试MariaDB的连通性,并将结果放入表中。

连接字符串1a(常//tr>1b(有效2.12.12.22.2

我能在没有登录凭据的情况下组成连接字符串吗?

否。MySqlConnector要求指定UserID,即使使用Unix套接字也是如此。本期将对此进行介绍。

解决方法是显式设置用户名:

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

(或者只是连接字符串中的硬代码;Username = pi。(

向我解释当作为参数传递给.UseMySql(cnn_str vs. MySqlConnection)时,MySqlConnection实例相对于连接字符串的优点和潜在缺点。

这两种方法看起来相当等价:连接字符串与连接。

一种是使用所提供的连接字符串;另一个读取CCD_ 9属性并使用该连接字符串。前者的效率会稍高,因为它不会创建一个额外的MySqlConnection对象来传递连接字符串;这在实践中可能可以忽略不计。

最新更新