解决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
相关产品推荐
相关产品推荐

