0

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

问题:

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

4

1 回答 1

2

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

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

3)这个代码是什么?

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

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

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

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

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

因此,这会让您使用System.Environment.UserName 作为您在网站后面的应用程序池中设置的系统用户。然后按照您认为合适的方式管理您的应用程序安全性。进入 .net 4.5 后的索赔本金是一种“新方式”。
但是你在这里保持尽可能简单。 Thread.CurrentPrincipal.Identity.Name 将包含基于表单的用户的名称。

祝你好运...

在此处输入图像描述

于 2013-01-31T02:42:36.963 回答