Asp.Net MVC 4,LocalDB和分离的服务层项目

时间:2013-01-30 23:40:36

标签: asp.net asp.net-mvc design-patterns asp.net-mvc-4

我使用Asp.net MVC 4.0和LocalDB构建了一个表单身份验证(实际上我正在使用新的单页面应用程序)网站。我想为访问数据库的服务层创建一个单独的类lib项目。我需要将默认的帐户/身份验证表与我自己的表集成。

问题:

  1. 我应该将Sql server LocalDB文件放在服务项目文件夹下吗?
  2. 如果答案不是针对(1),那么服务项目如何访问MVC项目下的LocalDB文件?
  3. 如果我将LocalDB文件放在服务项目下,是否需要修改系统生成的帐户登录代码。如何让身份验证代码通过服务层而不是默认的DBContext访问数据库?

1 个答案:

答案 0 :(得分:2)

这种模式很常见,主要控制和理解点是IIS和安全性。 值得一看的是MSDN IIS网站对这个话题充满信心。 http://msdn.microsoft.com/en-us/library/aa292471%28v=vs.71%29.aspx

1)SQL server DB的位置无关紧要。 SQL Server实例所在的位置确实起作用。如果它在同一个域/ AD中,那么使用Windows集成安全性登录到数据库效果很好。 2)如果连接到SQL的用户标识是数据库实例上的有效用户,并且具有底层数据库的必要权限,则可以访问数据。

3)这段代码是什么?

有许多问题需要回答/考虑。

a)您是否在IIS中使用FORMS登录或Windows集成登录? b)是否要使用服务用户访问数据库,或者让每个用户在Db中分配。 c)您的应用程序的安全模型是什么。

另见http://leastprivilege.com/category/net-security/ Dominick Baier安全博客。

作为示例解决方案,(不是唯一的解决方案)。

  • 您可以在IIS中设置网站以使用FORMS身份验证
  • 将IIS中网站使用的应用程序池设置为使用特定的Service用户。您在IIS应用程序池中键入用户标识和密码。您必须首先在域上创建此用户。尽可能少地分配它。
  • 将此服务用户添加到SQL Server,并在应该访问的DB中为其提供足够的权限。 (2个步骤)因此,服务用户可以访问数据库但不做其他事情。

因此,您将使用 System.Environment.UserName 作为您在网站后面的应用程序池中设置的系统用户。 然后根据需要管理您的应用程序安全性。 一旦你到达.net 4.5,索赔主体是一种“新方式” 但是你保持这里所要求的简单。 Thread.CurrentPrincipal.Identity.Name 将包含基于表单的用户的名称。

祝你好运......

enter image description here