代码之家  ›  专栏  ›  技术社区  ›  Ryan Eastabrook

匿名访问(IIS)和SQL Server

  •  9
  • Ryan Eastabrook  · 技术社区  · 16 年前

    我刚刚在雷德蒙德接受了一次采访,他们问了我很多关于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访问权限,该怎么办?有什么理由认为这样做是个坏主意吗?

    我试着去想所有的场景,在这些场景中,这是一个坏主意,我能想到的唯一一个场景是,一个“黑客”破坏了web服务器上的代码,然后以某种方式访问了您的SQL服务器……但这可能发生在任何一个场景中。

    有人知道这里的最佳实践吗?

    2 回复  |  直到 16 年前
        1
  •  2
  •   rsrobbins    16 年前

    也许可以使用ODBC为SQL Server连接创建DSN。那么您的web.config只需要知道DSN。这可能需要您使用System.Data.OleDb。我从未见过在ASP.NET中使用DSN,但它曾经是经典ASP.NET的标准。我从来没有听说过使用Active Directory来管理ODBC。

        2
  •  1
  •   PJ8    16 年前

    在我工作的地方,我们有一个在特定域帐户下运行的windows服务。该帐户在SQL Server中设置为登录名,并且在需要访问的数据库中有一个匹配的用户。我们在这方面从来没有遇到过任何问题。

    我认为最重要的是正确配置您的数据库用户(或角色),使其只能访问所需的内容。

    我已经考虑过使用AD以您在第一段中描述的类似方式管理SQL访问。(AD组->SQL Server登录->DB用户->DB对象)到目前为止,我看到的唯一缺点是,如果用户直接连接到数据库,他们会绕过应用程序中的任何逻辑。一个好处是,您知道哪些域用户正在访问您的数据库。