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

解决C#连接MariaDB报错‘Host x.x.x.x is not allowed...’问题

解决C#连接MariaDB时"Host x.x.x.x is not allowed to connect to this MariaDB server"的问题

1. 修复配置读取的核心错误

你的代码中ConfigurationManager.AppSettings的用法完全错误——这个方法是通过配置键名读取对应的值,而非直接将目标值作为键传入。

首先在App.config(Windows Forms项目)中配置正确的键值对:

<appSettings>
  <add key="DbServer" value="192.168.60.54" />
  <add key="DbName" value="libreriawindowsform" />
  <add key="DbUser" value="antonio" />
  <add key="DbPassword" value="" />
</appSettings>

然后修改AccesoBD构造函数,通过键名读取配置:

public AccesoBD()
{
    try
    {
        servidor = ConfigurationManager.AppSettings["DbServer"];
        bdNombre = ConfigurationManager.AppSettings["DbName"];
        usuario = ConfigurationManager.AppSettings["DbUser"];
        contrasena = ConfigurationManager.AppSettings["DbPassword"];
    }
    catch (Exception e)
    {
        // 添加错误日志便于排查,不要仅抛出空异常
        Console.WriteLine($"配置读取失败:{e.Message}");
        throw;
    }
}

之前的错误写法会导致servidor等变量全部为null,拼接出的连接字符串完全无效,这是连接失败的主要诱因。

2. 优化连接字符串构建方式

避免手动拼接字符串(易出现格式错误),改用MySqlConnectionStringBuilder:

protected void abrirConexion()
{
    try
    {
        var connBuilder = new MySqlConnectionStringBuilder
        {
            Server = servidor,
            Database = bdNombre,
            UserID = usuario,
            Password = contrasena,
            SslMode = MySqlSslMode.None
        };

        // 使用using自动释放连接资源,避免泄漏
        using (conexion = new MySqlConnection(connBuilder.ConnectionString))
        {
            conexion.Open();
            // 连接成功后的业务逻辑
        }
    }
    catch (Exception e)
    {
        Console.WriteLine($"数据库连接失败:{e.Message}");
        throw;
    }
}

3. 验证数据库用户的主机权限

即使终端能连接,仍需确认用户antonio的权限是否覆盖C#程序运行的主机IP。登录MariaDB执行:

SELECT user, host FROM mysql.user WHERE user = 'antonio';

如果结果中host为localhost或特定IP,而程序运行主机不在范围内,执行以下命令更新权限(生产环境建议替换为具体IP,而非%):

GRANT ALL PRIVILEGES ON libreriawindowsform.* TO 'antonio'@'%' IDENTIFIED BY '';
FLUSH PRIVILEGES;

4. 排查网络连通性

确保程序运行主机能ping通192.168.60.54,且MariaDB服务器的3306端口未被防火墙拦截,可通过telnet 192.168.60.54 3306测试端口是否开放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:35:15