使用实体框架时保护生产数据库的最佳实践

问题描述

我一直在帮助一家中小型企业使用 sql server 的实体框架核心实施新的 CRM。他们非常保护他们的 sql 数据库,以至于他们拒绝授予大多数表的权限,只授予某些列的某些权限(这是他们过去的工作方式,使用视图来执行所有数据操作)。

我曾论证过授予实体框架权限的理由,但被拒绝,理由是大型企业在任何情况下都不会拥有对实时数据库具有完全访问权限的凭据。

发布到生产环境时,数据库访问的最佳实践是什么?主要组织是否通常拥有可以完全控制数据和迁移架构的用户名和密码,或者是否有正确的方法来限制 ORM 的访问权限?

解决方法

我同意丹。如果您要为所有 CRUD 操作创建存储过程,那么使用 EF 没有多大意义。对于任何具有大量程序的大型系统。我重写了一些旧代码,从所有存储过程移动到 EF Core,赋予 EF 完全读/写访问权限。存储过程更容易,因为您完全了解数据库中发生的一切。没有惊喜。但是需要编写和维护大量代码。 EF Core 让您可以专注于使用数据,而无需编写大量 SQL 代码。在我看来,以前的系统仍然可以完全访问数据。它必须或无法管理数据。它只是被分解成数百个存储过程而不是单个数据上下文。最后,我没有将 EF Core 的特权视为额外的安全风险。如果这个想法是程序的复杂性使其免受攻击,我认为这是一个弱论点。一旦攻击者获得了系统访问权限,人们可能会认为他们可以解决其余的问题。