每 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.