Entity Framework无sp_executesql权限时能否执行自定义存储过程?
结论
可以正常执行,仅授予自定义存储过程EXECUTE权限、不授予sp_executesql执行权限的方案完全可行,符合你的安全要求。
详细说明
- EF Core调用
sp_executesql的前提是执行框架自动生成的动态SQL:比如运行LINQ查询、使用EF默认生成的实体增删改逻辑时,EF会用sp_executesql执行参数化的动态语句,这种场景才需要账号有sp_executesql的执行权限。 - 如果你仅通过EF Core显式调用自定义存储过程,比如用以下两种常用写法:
- 执行无返回值/仅返回受影响行数的存储过程:
context.Database.ExecuteSqlRaw("EXEC 你的自定义存储过程名 @参数1, @参数2", 参数值1, 参数值2); - 执行返回结果集的存储过程:
context.自定义实体集.FromSqlRaw("EXEC 你的自定义存储过程名 @参数1", 参数值1).ToList();
或者你通过EF Core的模型配置,将实体的增删改操作直接绑定到指定自定义存储过程,EF都会直接调用目标存储过程,不会触发sp_executesql的执行,权限校验仅会检查账号是否拥有对应自定义存储过程的执行权限。
- 执行无返回值/仅返回受影响行数的存储过程:
迁移适配建议
你当前的VB6项目本身就重度依赖自定义存储过程实现数据操作,迁移到.NET 5/6时完全可以避开EF Core的自动SQL生成逻辑,所有数据操作都显式调用现有自定义存储过程即可,既可以降低迁移成本,也能满足你收紧数据库权限的安全要求。
内容的提问来源于stack exchange,提问作者Muroxxas
相关产品推荐
相关产品推荐

