2012-03-04 76 views
1

我们当前使用连接字符串来验证我们的数据库凭据。由于成长和合规性,开发人员不再允许“查看”我们网站使用的数据库凭证。解决这个问题的方法是使用集成身份验证。我们计划为每个应用程序池设置一个用户,然后允许用户访问数据库。安全问题ASP.NET集成身份验证

我的问题是:这种方法是否存在任何安全问题?迄今为止,从连接字符串中删除DB凭证,是否有更好的(更简单或更简单)的方法,我们应该/可以采取?

回答

0

如果您的连接字符串存储在web.config文件中,那么您可以创建该文件的一个单独的生产版本,以供deverlopers看不到。与使用应用程序池的集成身份验证相比,测试和设置更容易。

但有一句话警告:如果你限制了开发者那么多,它会减慢它们的变化速度。由于世界其他地区一直在不断移动,这通常会以应用程序成为死亡遗留软件包结束。如果你计划增长,改进或扩展,这很危险。

+0

总而言之,我们别无选择,只能限制开发者的访问。 – 2012-03-04 15:05:54

+0

[萨班斯 - 奥克斯利法案](http://en.wikipedia.org/wiki/Sarbanes-Oxley_Act)?这将如何迫使您限制开发人员而不是系统管理员访问? – Andomar 2012-03-04 15:16:43

+0

它迫使问题分离,作为开发人员的人不能管理员访问数据库,也不能部署自己的代码。至少根据安永会计师事务所。 – 2012-03-04 20:29:48

1

如果您需要保护和生产数据库审计访问,则Windows身份验证比SQL身份验证的一些原因是更好的选择:

  1. 您可以控制谁可以完全通过NT访问数据库组和权限,这意味着你知道谁具体访问数据库。使用sql认证的访问池仅受限于谁知道密码。如果有n个知道密码的人,那么在某个特定时间跟踪谁做了什么是棘手的(但并非不可能)。

  2. 只有您的系统管理员需要知道访问数据库的NT标识的密码;事实上,只有知道用户名才能完成许多配置。

  3. 登录和访问可以在域级别跟踪,比使用SQL Server登录更容易。

什么,它不会给你的是:

  1. 能力,以确保开发人员不能看到生产数据 - 无论谁写的应用程序可以很容易地包括一些诊断程序,以选择出的数据

  2. 确保生产数据仅保留在生产环境中 - 任何人对生产数据库进行备份(比如将其恢复到UAT环境进行测试)可以轻松地公开生产数据。

此方法的问题已在其他帖子中讨论;尤其是使用ASP.Net应用程序时,您必须考虑是否要使用模拟/授权(Web服务器可以充当访问它的NT用户)或可信用户模型(您可以配置固定身份以访问某些资源)。

这是由您正在使用的IIS版本进一步复杂。

+0

应用程序池不是用户特定的,而是应用程序特定的。该应用程序仍将使用一个帐户连接到数据库。要使用最终用户凭证登录,您必须模拟最终用户。模拟的副作用是连接池不再起作用。 – Andomar 2012-03-04 22:31:59

+0

您可以为该应用程序创建一个以“可信用户”身份运行的单个应用程序池,但是在执行任何操作时您还会捕获当前用户身份击中该网站。对于连接池是真实的 - 但这仅仅是因为它现在是模拟中每个用户的实例,并且不能共享。 SOX通常是要确保你知道谁在做什么,谁可以做什么,并阻止他们做他们不应该做的事情;另外,在我以前的工作中,任何使用SQL身份验证的应用程序都无法验证SOX。 – dash 2012-03-04 22:34:49