2012-02-02 79 views
1

我有一种情况,我想使用数据库对象的权限,但不允许足够聪明的用户通过excel和访问来操作数据。我们希望要求用户通过我们的Web应用程序建立连接,这确保了数据在一个地方的验证。有没有办法确保用户与数据库建立连接并具有允许他通过Web应用程序插入,更新或删除的权限集?EntityFramework最佳实践RE:数据库安全

如果没有A方式,那么您在处理这种情况时如何处理这种情况,而无需使用Web应用程序连接的主用户?

+0

不要给你的用户访问数据库。为网站提供单一数据库登录。 – TGnat 2012-02-02 18:53:21

+0

请阅读最后一句。 – bdparrish 2012-02-02 19:15:14

回答

1

您可以使用大多数系统所做的主帐户,因为如果您想使用其他层(您的Web应用程序)进行数据验证,规则检查等,则没有理由让用户访问数据库。这就是一种不允许用户直接访问数据库的方式。

一旦你允许用户访问数据库,他可以做任何他允许的任何事情。没有什么会阻止用户直接访问数据库。此外,如果您在Web应用程序中不使用主帐户,则必须通过Web应用程序委派用户(如果数据库服务器与Web应用程序不在同一台机器上,则需要Windows域和Kerberos)。该代表团将为您的用户在您的应用程序中为用户提供与您的应用程序完全相同的权限。

+0

我知道这不是处理DbContext时最正确的方法,但是由于我的客户和他们的客户之间有MOA,我可以使用'context.Database.ExecuteSqlCommand()'来发送一个实体到数据库,以允许使用StoreProcedures来降低用户能够插入,更新或删除的风险? – bdparrish 2012-02-03 14:35:22

+0

但是,从您的应用程序连接到数据库将使用哪个帐户?如果应用程序主帐户,您可以使用任何你想要的。如果用户帐户,您仍然不能解决主要问题。用户必须拥有执行每一个存储过程和选择数据的权限(否则你不能使用LINQ查询),并且能够在没有你的应用程序的情况下做到这一点。所以一般来说,为了确保所有验证,您必须将所有逻辑和验证移至存储过程。 – 2012-02-03 14:56:18

+0

是的,你是正确的,将直接授予用户数据库层的权限。我的解决方案是,由于存储过程的名称和参数不会公开,这意味着用户更可能无法执行插入,更新或删除功能,因为该应用程序是内联网应用程序,所有用户都是内部的。我发现的唯一的其他选择是执行登录触发器,但必须进行额外交易的数量并不能衡量风险。 – bdparrish 2012-02-03 15:10:59