You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用MySqlConnection.Open()报mysql_native_password认证访问被拒绝如何解决

异常排查解决步骤

该报错本质是MySQL服务端拒绝了程序的登录请求,问题完全出在数据库连接建立环节,和后续插入逻辑无关,按以下步骤逐一排查即可:

1 基础连接配置校验

  • 确认连接字符串的四个参数完全正确,你当前代码里的参数都是占位符,实际运行需替换为真实值:
    • SERVER:填MySQL服务器的真实IP/域名,本地测试可写127.0.0.1或localhost
    • UID:填MySQL中真实存在的用户名,注意MySQL用户名大小写敏感,统一用小写可避免意外问题
    • PASSWORD:确认密码无多余空格、特殊字符转义错误,如果密码包含;、'这类特殊字符,需要用引号包裹密码,写法为PASSWORD="your;pass?word";
    • DATABASE:确认目标库在MySQL中真实存在,且所用账号有权限访问该库
  • 先拿数据库管理工具(Navicat、DBeaver、MySQL命令行)用完全相同的IP、账号、密码、库名尝试连接,能连通再测试代码,可排除大部分配置错误。

2 MySQL用户权限校验

报错明确提示拒绝的是user'@'p4fe986ad.dip0.t-ipconnect.de来源的登录请求,MySQL用户权限是和登录来源IP/域名绑定的,需要做如下校验:

  • 登录MySQL服务端,执行SQL查询对应用户的权限配置:
    SELECT user, host FROM mysql.user WHERE user = '替换为你的真实用户名';
    
  • 如果需要允许该用户从任意IP登录,执行以下SQL修改权限并刷新生效:
    -- 修改用户允许登录的来源
    UPDATE mysql.user SET host = '%' WHERE user = '替换为你的真实用户名' AND host = '原配置的host值';
    -- 给用户分配对应库的操作权限
    GRANT ALL PRIVILEGES ON 替换为你的库名.* TO '替换为你的真实用户名'@'%';
    -- 刷新权限立即生效
    FLUSH PRIVILEGES;
    
  • 如果需要限制仅固定IP登录,把%替换为程序运行的出口IP或者报错里的域名p4fe986ad.dip0.t-ipconnect.de即可。

3 特殊场景排查

  • 确认用户的身份验证插件和报错中匹配,执行以下SQL查询:
    SELECT user, host, plugin FROM mysql.user WHERE user = '替换为你的真实用户名';
    
    如果插件不是mysql_native_password,执行SQL修改:
    ALTER USER '替换为你的真实用户名'@'%' IDENTIFIED WITH mysql_native_password BY '替换为你的真实密码';
    FLUSH PRIVILEGES;
    
  • 检查MySQL服务端防火墙是否开放3306默认端口,是否配置了IP白名单限制,可通过telnet 你的MySQL服务器IP 3306命令测试网络连通性。
额外代码优化提示

你当前的SQL拼接写法存在严重的SQL注入漏洞,建议改为参数化查询,同时用using块管理数据库连接避免资源泄漏,示例如下:

string verbindungsdaten1 = "SERVER=server;" +
                           "DATABASE=db;" +
                           "UID=user;" +
                           "PASSWORD=password;";
// using块会自动释放连接资源,无需手动调用Close
using(MySqlConnection verbindung1 = new MySqlConnection(verbindungsdaten1))
{
    string command = "INSERT INTO Accounts VALUES (@username, @password, false);";
    MySqlCommand com = new MySqlCommand(command, verbindung1);
    // 参数化赋值,完全避免SQL注入风险
    com.Parameters.AddWithValue("@username", text);
    com.Parameters.AddWithValue("@password", utils.hashPassword(confirmed_pass));
    verbindung1.Open();
    com.ExecuteNonQuery();
}

内容的提问来源于stack exchange,提问作者Sarper Eroglu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:06:01