MySQL Grant使用MySQL .Net连接器

时间:2012-01-26 20:49:52

标签: c# mysql

我在一个名为qrtest_db的远程服务器上有一个数据库,并且我已经连接了thru putty,并为其提供了所有权限。在我的C#应用​​程序中,我可以正常访问它,正常的日常工作,更新,插入删除等。 当我做SHOW GRANTS时,我会回来以下......

GRANT ALL PRIVILEGES ON *.* TO 'root'@'myIpAddress' IDENTIFIED BY PASSWORD 'myPasswordencrypted' 
GRANT ALL PRIVILEGES ON `qrtest_db`.* TO 'root'@'myIpAddress'

但是如果我尝试在C#中运行GRANT语句,如下所示。 。 。

"GRANT USAGE ON qrtest_db.* to 'root'@'" + someIPAddress + "' IDENTIFIED BY 'myPassword'";

然后在cmd.ExecuteNonQuery上我收到消息。 。

用户'root'@'myIPAddress'拒绝访问数据库'qrtest_db'

有没有人知道为什么会发生这种情况? 是否不允许远程通过.Net连接器授予? 我可以坐在控制台上,全天授权。

1 个答案:

答案 0 :(得分:4)

您没有GRANT权限。
Becasue ALL PRIVILEGES不包含GRANT权限。 Reference

您使用'root'@'myIpAddress'创建了all privileges用户。它不包含GRANT。然后,您使用此新创建的用户('root'@'myIpAddress')连接到数据库服务器。您的C#应用​​程序正在使用'root'@'myIpAddress'用户连接到数据库服务器。当您通过C#输入GRANT命令时,它会失败。因为此用户('root'@'myIpAddress')没有GRANT选项。你没有那样创造它。

您应该使用这些语句(附加WITH GRANT OPTION

创建了用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'myIpAddress' IDENTIFIED BY PASSWORD 'myPasswordencrypted' with GRANT OPTION
GRANT ALL PRIVILEGES ON `qrtest_db`.* TO 'root'@'myIpAddress' WITH GRANT OPTION