用户 'root'@'localhost' 的 ASP.NET MVC MySQL 访问被拒绝(使用密码:否)

Posted

技术标签:

【中文标题】用户 \'root\'@\'localhost\' 的 ASP.NET MVC MySQL 访问被拒绝(使用密码:否)【英文标题】:ASP.NET MVC MySQL Access denied for user 'root'@'localhost' (using password: NO)用户 'root'@'localhost' 的 ASP.NET MVC MySQL 访问被拒绝(使用密码:否) 【发布时间】:2020-03-28 02:02:11 【问题描述】:

我正在学习如何使用 MVC 模板来创建 ASP.NET Web 应用程序。 正如标题所述,我使用的是 mysql,我可以在 server explorer > Data Connections 中看到连接,从那里我得到了 connectionString,并且连接正确。

拒绝用户“root”@“localhost”访问(使用密码:否)

是我尝试将数据保存到(当前为空)数据库时遇到的错误。 这是我的connectionString

  <connectionStrings>
    <add name="dbname" connectionString="server=localhost;user id=root;persistsecurityinfo=True;database=dbname" />
  </connectionStrings>

我得到的错误在下面一行

public static int SavedData<T>(string sql, T data)

    using (IDbConnection cnn = new MySqlConnection(GetConnectionString()))
    
        return cnn.Execute(sql, data); //here is the error
    

我不明白。它说错误是针对用户的,并且没有使用密码?正在使用密码,并且设置正确。有想法该怎么解决这个吗?我已经阅读了许多其他线程,但主要是在密码或使用其他工具(如 xampp、php 等)的配置中存在错误,这不是我的情况。

编辑:

我遵循了这个使用 SQL 而不是 MySql 的教程,并使用了一个名为 Dapper 的工具,我不知道它的用途,在堆栈跟踪中我看到以下错误

Dapper.SqlMapper.ExecuteCommand(IDbConnection cnn, CommandDefinition& command, Action`2 paramReader) +85
   Dapper.SqlMapper.ExecuteImpl(IDbConnection cnn, CommandDefinition& command) +763
   Dapper.SqlMapper.Execute(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Nullable`1 commandTimeout, Nullable`1 commandType) +117

我目前正在用 MySQL 调查 dapper。

编辑 2:

我尝试修改连接字符串,所有值都设置正确。但我仍然得到完全相同的错误,我认为这不是实际问题(我不得不修改 root 密码,因为我在密码中使用了双引号和 #。无论如何,这就是它现在的样子,并且连接已经过测试并且工作正常。

 <connectionStrings>
    <add name="dbname" connectionString="Persist Security Info=False;database=dbname;server=localhost;Connect Timeout=30;user id=root; pwd=_password" />
  </connectionStrings>

【问题讨论】:

您的数据库设置中是否存在用户root?另外,你的sql查询是什么?表的名称是什么,等等... 是的@GlennvanAcker 正如我所说,用户和密码设置正确,我可以在 Data Connections 中看到数据库,连接测试正常,我也可以在 root 用户中看到它MySQL工作台,不是用户和密码的问题,所以我不明白错误。 我在你的连接字符串中没有看到密码,你在用吗? 是的,我当然是。您可以在visual studio中添加连接,并在那里设置密码,然后您可以从隐藏密码的添加连接中复制连接字符串 但是您正在创建一个程序集并运行它。因此,调试或运行时没有密码,因为您没有更改连接字符串以显式包含它。 【参考方案1】:

我相信代码很容易理解,也是我想做的,但我知道现在更有经验的程序员可能认为它不完整。 我试图做的是保存数据,但由于 access denied 类型的错误而无法保存,我认为这来自 Visual Studio 处理可能的项目的方式添加为 SQL 服务器项目,我无法使用 MySQL 项目(在我遵循的教程中,他从他添加的服务器资源管理器项目中复制了字符串,然后将其粘贴到 web.config 上的 connectionString 中,这显然没有t 为我工作),我也学到了关于 GetConnectionString() 方法的教训,这在我的问题中没有解释,这就是为什么它被选为关闭问题,但我知道它正在工作(也许没有做它但是,应该这样做;我摆脱了它),仍然,也许问题就在那里。 所以我最终做了以下,这工作正常

public static void SavedData(int _SomeField)


    FooModel data = new FooModel
    
        SomeField = _SomeField
    ;

    MySqlConnection dbConnection;

    MySqlConnectionStringBuilder connectionBuilder = new MySqlConnectionStringBuilder();

    connectionBuilder.Server = "localhost";
    connectionBuilder.UserID = "root";
    connectionBuilder.Password = "password";
    connectionBuilder.Database = "foo";

    dbConnection = new MySqlConnection(connectionBuilder.ToString());


    String query = String.Format("insert into foo.foo (SomeField) values ('0')", @data.SomeField);

    dbConnection.Open();

    MySqlCommand cmd = new MySqlCommand(query, dbConnection);

    cmd.ExecuteNonQuery();

    dbConnection.Close();


【讨论】:

只是为了解决这个问题,您可以发布 GetConnectionString 方法的代码吗?它是您的代码还是某个库中的方法?一开始,你是从 app.config 读取连接字符串还是在构建它?

以上是关于用户 'root'@'localhost' 的 ASP.NET MVC MySQL 访问被拒绝(使用密码:否)的主要内容,如果未能解决你的问题,请参考以下文章

用户'root'@'localhost'的访问被拒绝)

错误:java.sql.SQLException:用户'root@localhost'@'localhost'的访问被拒绝(使用密码:是)

用户'root'@'localhost'的MYSQL访问被拒绝

用户'root'@'localhost'的访问被拒绝(使用密码:YES)

用户 'root'@'localhost' 的访问被拒绝

用户和组操作