我在一个名为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连接器授予? 我可以坐在控制台上,全天授权。
答案 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