我刚刚在雷德蒙德接受采访,他们向我询问了围绕asp.net的大量安全问题。他们提出的一个问题是如何配置安全的Intranet应用程序以使用约束委派来访问SQL Server。在此方案中,AD用户帐户被委派访问SQL Server。当然,完整的目的是:a)不在Web服务器(web.config)的任何地方存储任何用户名/密码,b)提供可在Active Directory中管理的抽象安全模型。
这让我想到这些年来我一直在为匿名访问配置我的网站。通常,我将使用默认的匿名帐户运行我的IIS网站,并将连接字符串存储在web.config中(加密,有时以明文形式)。当然,这需要您的SQL Server以混合模式运行。所以我的问题是,如果我们根本没有将连接字符串存储在web.config中,并且只为特定网站创建了一个唯一的匿名域帐户,该帐户将在SQL Server中具有db_datareader访问权限?这样做有什么理由不错吗?
我试图想到所有这些都是个坏主意的场景,我唯一能想到的是“黑客”破坏了网络服务器上的代码,然后以某种方式获得了对SQL的访问权限服务器......但这可能发生在任何一种情况下。
有谁知道这里的最佳做法?
答案 0 :(得分:2)
也许您可以使用ODBC为SQL Server连接创建DSN。然后你的web.config只需要知道DSN。这可能需要您使用System.Data.OleDb。我从来没有见过在ASP.NET中使用的DSN,但它曾经是Classic ASP的标准。我从来没有听说过Active Directory用于管理ODBC。
答案 1 :(得分:1)
在我工作的地方,我们有一个在特定域帐户下运行的Windows服务。该帐户在SQL Server中设置为登录,并且在其需要访问的数据库中具有匹配的用户。我们从来没有遇到任何问题。
我认为最重要的是正确配置您的数据库用户(或角色),以便它只能访问所需的内容。
我已经考虑使用AD以与您在第一段中描述的方式类似的方式管理SQL访问。 (AD组 - > SQL Server登录 - >数据库用户 - >数据库对象)到目前为止,我能看到的唯一缺点是,如果用户直接连接到数据库,他们将绕过您在应用程序中的任何逻辑。一个好处是,您知道域用户正在访问您的数据库。