我有一个MySQL数据库,我在其中创建了一个新的用户帐户,如下所示:
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT SELECT ON database.* TO 'username'@'%';
运行"显示'用户名'"确认权限为:
GRANT USAGE ON *.* TO 'statstracker'@'%' IDENTIFIED BY PASSWORD 'passwordhash'
GRANT SELECT ON `database`.* TO 'username'@'%'
我可以通过MySQL Workbench连接到数据库并通过此用户帐户执行查询。我甚至可以通过MySQL Workbench从网络上的不同主机连接,但是当我尝试在我的程序中这样做时,它会因以下错误而失败:
SELECT命令被拒绝用户'用户名' @'主机名'表格' tablename'
这是我非常简单的测试代码:
String str = @"server=serverip;database=databasename;userid=username;password=password;";
MySqlConnection con = null;
try
{
con = new MySqlConnection(str);
MySqlCommand cmd = new MySqlCommand("SELECT ID FROM `database`.`table`", con);
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr["ID"]);
}
}
catch (MySqlException err)
{
Console.WriteLine("Error: " + err.ToString());
}
finally
{
if (con != null)
{
con.Close();
}
}
有没有人对我如何解决这个问题有任何建议?
编辑:更多信息
如果我没有尝试进行选择而只是打开连接,则连接打开就可以了:
String str = @"server=serverip;database=databasename;userid=username;password=password;";
MySqlConnection con = null;
try
{
con = new MySqlConnection(str);
con.Open();
Console.WriteLine("Opened Just Fine");
}
catch (MySqlException err)
{
Console.WriteLine("Error: " + err.ToString());
}
finally
{
if (con != null)
{
con.Close();
}
}
此外,我使用第一个代码片段(带有选择的代码片段)对不同主机上的不同MySQL服务器,使用类似创建的用户帐户,并且它有效。这是否意味着我的代码很好,这是一个配置问题?如果是这样的话,我应该考虑一下什么样的事情来试图找出正在发生的事情?