将Entity Framework与存储过程一起使用的潜在风险只能执行SQL Server数据库的权限

时间:2017-08-02 15:14:19

标签: sql-server entity-framework stored-procedures

在我的新项目中,应用程序SQL Server用户Id仅对数据库具有“执行”权限。

我计划将实体框架与WebAPI一起使用,并使用SQL Server端的存储过程将数据提供给我的AngularJS网站。 DBA不允许表访问,因此编写Linq是不可能的。

我使用下面的代码测试了一个基本查询(select *),一切正常:

var Data = PreEmploymentEntity.Database.SqlQuery<PortalUser>("Exec Test").ToList();
return Ok(Data);

如果我继续这样做,有什么我应该考虑或与设计相关的风险吗?

我发现了这个链接 - Entity Framework only with stored procedures,但我不确定他们是否只有“执行”权限。

提前致谢!

1 个答案:

答案 0 :(得分:2)

答案取决于它。如果满足下列条件之一,则用户可以使用存储过程访问数据库对象,而无需对其中的对象具有任何权限:

  • 您的程序正在使用用户EXECUTE AS Clause 在此子句中具有所有必要的权限
  • 过程所有者与所有对象的所有者相同 通过此过程访问(请参阅Ownership Chains),其中不使用动态代码。

在这两种情况下都有另一个限制:

  • 存储过程必须只使用DML(例如,TRUNCATE TABLE是 不是DML)

如果您应该使用DDL,则可以使用certificate

为您的sp签名

最后一件事,使用证书签名,允许您通过程序执行所有操作,但这是授予权限的最困难方法。