我有一小段代码在mysql数据库中执行存储过程:
string connectionString = "server=127.0.0.1;uid=root;database=myDb;pwd=mypwd;";
using (IDbConnection db = new MySqlConnection(connectionString))
{
var record = db.Query<dynamic>("record_Get", commandType: CommandType.StoredProcedure);
}
当连接字符串使用root用户凭据时,存储过程将按预期执行。但是,当我尝试使用另一组凭据(other_user)时,在查询数据库时收到以下错误消息:
System.Data.SqlTypes.SqlNullValueException: 'Data is Null. This method or property cannot be called on Null values.'
我试图确保other_user具有正确的权限。我进入了“用户和特权”选项卡,并在架构级别授予了SELECT和EXECUTE权限。为了很好,我也跑了:
GRANT EXECUTE ON mydb.* TO 'other_user'@'%';
没有骰子。
如果我在C#代码中将record_Get存储过程查询交换为直接SQL命令,则记录将成功返回:
var record = db.Query<dynamic>("SELECT * from record"); // Not the actual query
用户还可以在SQL脚本中执行存储过程:
EXECUTE record_Get(); /* works fine! */
通过在Workbench GUI中单击闪电符号来尝试执行存储过程,什么都没有。列出了这些过程,用户可以通过脚本执行它们,但是GUI按钮不执行任何操作。 (不确定是否已连接)
这似乎是权限问题,但我之前从未见过,而且不太确定下一步该怎么看。有人有建议吗?
mysql版本:8.0.12