C# 加载数据本地填充无法在.net core上工作

C# 加载数据本地填充无法在.net core上工作,c#,mysql,asp.net-core,C#,Mysql,Asp.net Core,以下查询在mysql中工作 DROP TEMPORARY TABLE IF EXISTS TempTbl; create temporary table TempTbl like ACTIVITY; LOAD DATA local INFILE 'C:\\test\\000000135_20190109133919.flat' INTO TABLE TempTbl COLUMNS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY

以下查询在mysql中工作

DROP TEMPORARY TABLE IF EXISTS TempTbl; 
create temporary table TempTbl like ACTIVITY; 

LOAD DATA local INFILE 'C:\\test\\000000135_20190109133919.flat' 
INTO TABLE TempTbl COLUMNS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES; 
但是当我尝试在.NETCore中运行时,我得到了以下错误。我怎样才能解决这个问题

var db = new RheEntities(Utils.GetAppSettingsByKey("ConnectionStrings:RheConnection"));
var query = System.IO.File.ReadAllText(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "App_Data/BulkInsertTemplate.sql"));
db.Database.ExecuteSqlCommand(query);
异常消息:

Error during LOAD DATA LOCAL INFILE
堆栈跟踪:

at MySql.Data.MySqlClient.MySqlDataReader.ActivateResultSet(ResultSet resultSet) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 80
at MySql.Data.MySqlClient.MySqlDataReader.ReadFirstResultSetAsync(IOBehavior ioBehavior) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 302
at MySql.Data.MySqlClient.MySqlDataReader.CreateAsync(MySqlCommand command, CommandBehavior behavior, ResultSetProtocol resultSetProtocol, IOBehavior ioBehavior) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlDataReader.cs:line 287
at MySqlConnector.Core.TextCommandExecutor.ExecuteReaderAsync(String commandText, MySqlParameterCollection parameterCollection, CommandBehavior behavior, IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\Core\TextCommandExecutor.cs:line 37
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQueryAsync(IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlCommand.cs:line 261
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlCommand.cs:line 62
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.ExecuteSqlCommand(DatabaseFacade databaseFacade, RawSqlString sql, IEnumerable`1 parameters)
at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.ExecuteSqlCommand(DatabaseFacade databaseFacade, RawSqlString sql, Object[] parameters)
内部异常:

Use SourceStream or SslMode >= VerifyCA for LOAD DATA LOCAL INFILE
详情:

.Net核心2.2

Microsoft.EntityFrameworkCore 2.2.1

Pomelo.EntityFrameworkCore.MySql 2.1.4

MySqlConnector 0.47.1


使用
MySql.Data(8.0.15)
解决问题。我认为(
Pomelo.EntityFrameworkCore.MySql 2.1.4
/
MySqlConnector 0.47.1
)中存在问题。

这是MySqlConnector中的安全功能;看见由于您未连接到经过验证的主机,MySqlConnector可防止信息泄露漏洞,该漏洞可让恶意服务器/代理读取系统上的任何本地文件

发件人:

本地版本的加载数据存在两个潜在的安全问题:

  • 从客户端主机到服务器主机的文件传输由MySQL服务器启动。理论上,可以构建一个补丁服务器,它会告诉客户机程序传输服务器选择的文件,而不是LOAD DATA语句中客户机指定的文件。这样的服务器可以访问客户端用户具有读取权限的客户端主机上的任何文件
您可以使用
MySqlBulkLoader
类来解决这个问题,而不是自己构造SQL:

var loader=新的MySqlBulkLoader(db.Database)
{
FileName=“C:\\test\\000000135\u 20190109133919.flat”,
TableName=“bl”,
FieldTerminator=“,”,
FieldQuotationCharacter=“”,
NumberOfLinesToSkip=1,
};
loader.Load();

您是否尝试在连接字符串中使用
SslMode=VerifyCA
SslMode=VerifyFull
?该消息是
NotSupportedException
,如果SSL模式未设置为
MySqlSslMode.VerifyCA
MySqlSslMode.VerifyFull
,则会触发该消息。是@tetsuyayayamamoto,我得到
服务器不支持端口SSL
错误。顺便说一句,此代码在.net framework上运行。@Psi mysql配置
松散的本地填充=1
。mysql端没有问题。只是不在.net核心上运行,pomelo/mysqlConnectorI只是想让您排除安全问题(这就是我指导您的地方).我想在客户端可能会发生类似的事情P.S.打开了一个问题,以使此异常消息更清晰(很抱歉,这让人困惑):