c# – 运行MySql存储过程的最低访问级别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 运行MySql存储过程的最低访问级别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2305字,纯文字阅读大概需要4分钟。
内容图文
![c# – 运行MySql存储过程的最低访问级别](/upload/InfoBanner/zyjiaocheng/895/cbd2648a9fba4536a4a83e94aa9ce1a9.jpg)
我正在尝试设置连接到MySQL数据库8.0的.NET 4.7.1程序,以使用最低权限运行.
.NET程序使用MySql.Data进行连接.用户执行存储过程的最小权限通常只是EXECUTE特权.从MySQL工作台或命令行可以正常工作.
运行.NET程序时,会返回以下异常:
System.Data.SqlTypes.SqlNullValueException:’数据为空.无法在Null值上调用此方法或属性.
为了方便起见,我创建了一个非常小的演示程序来演示这个问题.
数据库的设置:
CREATE DATABASE Spike;
CREATE PROCEDURE TestAccess()
BEGIN
END;
CREATE USER Spike@localhost IDENTIFIED WITH mysql_native_password BY 'sample';
GRANT EXECUTE ON PROCEDURE `TestAccess` TO Spike@localhost;
安装程序代码:
static void Main(string[] args)
{
using (MySqlConnection conn = new MySqlConnection("Server=localhost;Database=Spike;uid=Spike;pwd=sample"))
{
conn.Open();
Console.WriteLine("Connection open");
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = "TestAccess";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
Console.WriteLine("Query executed");
}
Console.ReadKey();
}
崩溃发生在cmd.ExecuteNonQuery()行;
崩溃的堆栈很有意思,因为它似乎表明查询了information_schema.记录所有语句时,我可以看到异常之前的最后一条语句是:
SELECT * FROM information_schema.routines WHERE 1=1 AND routine_schema LIKE 'Spike' AND routine_name LIKE 'TestAccess'
我无法在information_schema上授予不同的权限,但我可以在存储过程中赋予更多权限,以便在例程表中显示更多信息,但这感觉不对.授予CREATE和ALTER访问权限的简单测试也不起作用.
在没有授予太多特权的情况下,我能做些什么吗?
解决方法:
这似乎是Connector / NET中的一个错误,类似于bug 75301,但有点不同.当它尝试确定过程的参数元数据时,它首先创建一个名为Procedures的MySqlSchemaCollection,其中包含有关该过程的所有元数据. (这是SELECT * FROM information_schema.routines WHERE 1 = 1 AND routine_schema LIKE’Spike’AND routine_name LIKE’TestAccess’查询在日志中看到.)
Spike用户帐户无权读取ROUTINE_DEFINITION列,因此它为NULL. Connector / NET期望此字段为非NULL并在尝试读取时抛出SqlNullValueException异常.
有两种解决方法:
1)您发现的第一个是在连接字符串中设置CheckParameters = False.这将禁用存储过程元数据的检索(避免崩溃),但如果您没有完全正确地获取参数的顺序和类型,则可能导致调用其他存储过程的难以调试的问题. (Connector / NET无法再使用元数据为您映射它们.)
2)切换到不具有此错误的不同ADO.NET MySQL库:0700在NuGet.它与Connector / NET高度兼容,执行速度更快,并修复了很多known issues.
内容总结
以上是互联网集市为您收集整理的c# – 运行MySql存储过程的最低访问级别全部内容,希望文章能够帮你解决c# – 运行MySql存储过程的最低访问级别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。