每 2 次命中获得 "Access denied for user..."
Getting "Access denied for user..." every 2nd hit
我正在尝试在 .net core 1.0 中将 dapper 与 mysql 一起使用。我正在使用这个 mysql 连接器:https://github.com/bgrainger/MySqlConnector
我知道连接器处于 alpha 阶段,但我想知道是否有人在将它与 dapper 一起使用时遇到类似问题。
这是我的简单模型:
public List<GeneralModel> GetAllLists()
{
try
{
using (DbConnection connection = new MySqlConnection("Server=localhost;Database=lists;Uid=Unnamed;Pwd=lol;"))
{
return connection.Query<GeneralModel>("SELECT * FROM lists.general").ToList();
}
}
catch (Exception)
{
throw;
}
}
这是控制器:
public IActionResult Index()
{
GeneralModel GenRepo = new GeneralModel();
return View(GenRepo.GetAllLists());
}
当我第一次进入索引页面时,它起作用了。如果我刷新,我会得到一个 "Access denied for user..."。我不知道是什么导致了错误。我不认为问题出在我的代码中。
编辑:
我想问题出在连接器上,因为这也是 returns 刷新后的错误:
List<GeneralModel> lists = new List<GeneralModel>();
using (DbConnection connection = new MySqlConnection("Server=localhost;Database=lists;Uid=Unnamed;Pwd=lol;"))
{
using (DbCommand myCommand = connection.CreateCommand())
{
myCommand.CommandText = "SELECT * FROM lists.general";
connection.Open();
using (DbDataReader myReader = myCommand.ExecuteReader())
{
while (myReader.Read())
{
GeneralModel tmpGen = new GeneralModel();
tmpGen.name = myReader["name"].ToString();
tmpGen.description = myReader["description"].ToString();
tmpGen.language = myReader["language "].ToString();
lists.Add(tmpGen);
}
}
connection.Close();
}
}
return lists;
此错误是由 MySqlConnector not correctly handling the fast path for a COM_CHANGE_USER
packet 引起的。
MySQL 服务器(版本 5.6 和 5.7)似乎不会立即接受用户的凭据,但总是 returns Authentication Method Switch Request Packet。 MariaDB(您正在使用的)确实实现了快速路径并立即 returns 一个 OK 数据包。
连接器现已更新以处理此响应,并且应该停止抛出虚假的 "Access Denied" 异常。 fix is in 0.1.0-alpha09.
我正在尝试在 .net core 1.0 中将 dapper 与 mysql 一起使用。我正在使用这个 mysql 连接器:https://github.com/bgrainger/MySqlConnector
我知道连接器处于 alpha 阶段,但我想知道是否有人在将它与 dapper 一起使用时遇到类似问题。
这是我的简单模型:
public List<GeneralModel> GetAllLists()
{
try
{
using (DbConnection connection = new MySqlConnection("Server=localhost;Database=lists;Uid=Unnamed;Pwd=lol;"))
{
return connection.Query<GeneralModel>("SELECT * FROM lists.general").ToList();
}
}
catch (Exception)
{
throw;
}
}
这是控制器:
public IActionResult Index()
{
GeneralModel GenRepo = new GeneralModel();
return View(GenRepo.GetAllLists());
}
当我第一次进入索引页面时,它起作用了。如果我刷新,我会得到一个 "Access denied for user..."。我不知道是什么导致了错误。我不认为问题出在我的代码中。
编辑:
我想问题出在连接器上,因为这也是 returns 刷新后的错误:
List<GeneralModel> lists = new List<GeneralModel>();
using (DbConnection connection = new MySqlConnection("Server=localhost;Database=lists;Uid=Unnamed;Pwd=lol;"))
{
using (DbCommand myCommand = connection.CreateCommand())
{
myCommand.CommandText = "SELECT * FROM lists.general";
connection.Open();
using (DbDataReader myReader = myCommand.ExecuteReader())
{
while (myReader.Read())
{
GeneralModel tmpGen = new GeneralModel();
tmpGen.name = myReader["name"].ToString();
tmpGen.description = myReader["description"].ToString();
tmpGen.language = myReader["language "].ToString();
lists.Add(tmpGen);
}
}
connection.Close();
}
}
return lists;
此错误是由 MySqlConnector not correctly handling the fast path for a COM_CHANGE_USER
packet 引起的。
MySQL 服务器(版本 5.6 和 5.7)似乎不会立即接受用户的凭据,但总是 returns Authentication Method Switch Request Packet。 MariaDB(您正在使用的)确实实现了快速路径并立即 returns 一个 OK 数据包。
连接器现已更新以处理此响应,并且应该停止抛出虚假的 "Access Denied" 异常。 fix is in 0.1.0-alpha09.