Visual Studio中MySQL连接报错求助:root1用户localhost访问被拒绝
解决MySQL连接权限错误(Access denied for user 'root1'@'localhost')
错误信息
MySql.Data.MySqlClient.MySqlException: 'Authentication to host 'localhost' for user 'root1' using method 'mysql_native_password' failed with message: Access denied for user 'root1'@'localhost' (using password: YES)'
排查与解决步骤
1. 验证MySQL用户的合法性
- 登录MySQL命令行,执行以下命令检查目标用户是否存在:
如果SELECT user, host FROM mysql.user;root1@localhost不在结果列表中,执行以下语句创建用户并授权:CREATE USER 'root1'@'localhost' IDENTIFIED BY 'adimuser'; -- 授权访问目标数据库(匹配你SQL语句中的access_control库) GRANT ALL PRIVILEGES ON access_control.* TO 'root1'@'localhost'; FLUSH PRIVILEGES;
2. 修正连接字符串的参数错误
你的连接字符串中指定database=access_table,但SQL语句查询的是access_control.accesstable,说明数据库名应为access_control,需修正连接字符串:
Dim sqlConn As New MySqlConnection("server=localhost; user=root1; password=adimuser; database=access_control")
同时确认密码adimuser是否拼写正确(比如是否应为adminuser)。
3. 优化代码避免资源泄漏与重复加载
原代码存在连接状态未校验、资源未自动释放、数据重复加载的问题,建议修改为:
Private Sub updateTable() Dim sqlDT As New DataTable() ' 使用Using语句自动释放数据库连接、命令、阅读器资源 Using sqlConn As New MySqlConnection("server=localhost; user=root1; password=adimuser; database=access_control") sqlConn.Open() Using sqlCmd As New MySqlCommand("SELECT * From accesstable", sqlConn) Using sqlRd As MySqlDataReader = sqlCmd.ExecuteReader() sqlDT.Load(sqlRd) End Using End Using End Using DataGridView1.DataSource = sqlDT End Sub
4. 适配MySQL 8.0+的认证方式
若你的MySQL版本为8.0及以上,默认认证方式为caching_sha2_password,而错误提示使用mysql_native_password,可修改用户认证方式:
ALTER USER 'root1'@'localhost' IDENTIFIED WITH mysql_native_password BY 'adimuser'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者Buchi
相关产品推荐
相关产品推荐

