我使用Entity Framework完成了一项工作。但是,我的经理要求我使用存储过程。他说,目前,公司的数据库安全结构是建立在数据库角色之上的。
例如,我们有一个roleA,其中包括将访问数据库的AD用户,而roleA仅被赋予了相关存储过程的执行权限。如果我使用实体框架,查询将作为实际用户而不是数据库角色运行,因此这些用户可能直接连接到数据库并对其执行某些操作。
我不太熟悉数据库安全性。任何人都可以解释我的经理说的是否有效?
如果是这样,是否有任何解决方法,以便我仍然可以使用实体框架而不破坏公司的数据库安全结构?(即使用角色来执行查询而不是实际的AD用户)
答案 0 :(得分:2)
数据库角色是数据库级对象。用于运行应用程序的用户帐户必须首先登录服务器。然后,将根据数据库用户或数据库角色评估此帐户的权限。如果您的应用程序帐户将是roleA的成员,则它应具有“访问数据库”的权限,但如果访问仅意味着roleA的成员可以执行SP,则您可以忘记任何linq或ESQL查询,因为数据库安全性将根本不允许您调用他们(它将抛出安全例外)。
在这种情况下,EF的唯一优势是将SP的结果集自动映射到实体/复杂类型/自定义类型。不能使用linq-to-entities,只能通过映射存储过程修改实体。