ASP.NET 应用程序连接字符串和 SQL Server 安全/权限

Posted

技术标签:

【中文标题】ASP.NET 应用程序连接字符串和 SQL Server 安全/权限【英文标题】:ASP.NET Application Connection String and SQL Server Security / Permissions 【发布时间】:2012-04-16 17:30:12 【问题描述】:

我正在实时(生产)服务器上部署一个 ASP.NET 应用程序和 SQL Server (2008) 数据库。物理服务器同时运行 SQL Server 2008 和 IIS 7 - 它由托管公司提供,不属于我们的内部网络

我有几个关于数据库安全和 ASP.NET 应用程序的连接字符串的问题。

以前我会创建一个数据库用户并为每个表指定 SELECT/INSERT 等权限 - 但我的问题是此数据库中有 50 多个表,因此这样做需要很长时间

应用程序要求对每个表执行 SELECT/INSERT/DELETE/UPDATE。

有没有比单独为每个表指定权限更好的方法? 对于实时网络服务器,是否有类似的集成安全性 - 有哪些缺点? 或者有没有办法提升特定用户的访问权限以完全访问特定数据库

还有连接字符串会如何变化?

我只是在寻找一些专家的建议,只是有人可以为我指出正确的方向以及一些文档的链接,以了解如何实现更好的方法。

非常感谢。

【问题讨论】:

【参考方案1】:

您的项目符号列表中基本上有三个不相关的问题,而不是一个。

第一个更适合ServerFault.com,因为它处理SQL Server,不一定是编程问题。 然而,谷歌得到了回报,这里有一个方法:http://www.tech-recipes.com/rx/2298/sql_server_2005_easily_grant_select_all_tables_views/ 或者,您可以将用户分配到正确的组,如@Oded 的回答中所述:TSQL granting read and write permissions to all tables 对于第二个,集成安全性,是的,有一种方法可以将集成安全性与 ASP.NET 结合使用。见这篇文章:http://msdn.microsoft.com/en-us/library/bsz5788z.aspx 最大的缺点是配置较多。这是一种非标准(但受支持)配置,因此维护程序员以前可能没有见过该设置。 此外,如果您这样做,如果您使用的帐户在其他地方具有权限,则可能存在安全问题。一定要遵循最小特权原则。最好为每个网站专门创建一个域帐户,因此如果一个网站受到威胁,它会限制可以造成的损害。您比我更了解您的安全问题,因此这可能是相关建议,也可能不是相关建议,但值得考虑。 最后,(这可能太明显以至于无法指出)使用真人的 UserId 是愚蠢的。如果该人离开公司并且他们的帐户被删除,那么网站显然会崩溃。 既然我已经找到了第一个问题的答案,那么第三个问题就变得毫无意义了。

【讨论】:

msdn.microsoft.com/en-us/library/bsz5788z.aspx - 如果您的应用程序在基于 Windows 的 Intranet 上运行 - 这适用于 Intranet 网站吗? 是的。这对于 Windows 集成安全性是必需的 IF SQL 服务器位于另一台服务器上。您需要数据库和网站都信任的权限源。如果 SQL Server 与 Web 服务器位于同一台计算机上,则可以使用在该计算机上设置的本地帐户。大多数网站在另一台服务器上都有数据库,但出于性能考虑,如果没有别的原因 感谢您的帮助,在我的情况下,IIS 和 SQL Server 都在同一台机器上运行 - 在此服务器上为该 ASP.NET 应用程序设置集成安全性是否可行?这是一个外部/公共网络服务器。这有多难?你是说它需要在服务器上创建一个锁定的用户帐户? 是的,是可行的。在您的方案中,您可以授予 \Network Service 所需的 SQL Server 访问权限。想到它让我感到紧张,但我不知道为什么。仔细想想,我看不出这比拥有访问权限的 SQL 用户更安全/更安全。我会确保它只有它需要的权限,而不是更多。此外,当然,尽你最大的能力防范 OWASP 前 10 名。 owasp.org/index.php/Top_10_2010-Main 您显然比我更了解 SQL Server 安全性。看起来最好的选择是将数据库用户添加到 db_datawriter 角色。这是否包括存储过程和 UDF?【参考方案2】:

您可以创建或使用现有的数据库角色。然后,您将用户放入该角色以允许该用户拥有您需要的所有权限。例如,根据您描述的场景,您可以将您在连接中使用的用户帐户放入 db_datawriter 角色。

见http://msdn.microsoft.com/en-us/library/ms189121%28v=sql.105%29.aspx

本文还介绍了如何提升用户的权限。

Integrated security 可以工作——它只要求建立连接的计算机上使用的登录名可以被数据库服务器识别(在相同或信任的 Windows 域中)。

【讨论】:

使用 db_datawriter 似乎是最好的方法,我是否认为集成安全仅适用于在本地或 Intranet 上运行的网站? 在典型情况下,您是正确的。请参阅***.com/questions/651531/…,了解其他可能允许其在 Internet 场景中工作的非典型配置的详细信息。

以上是关于ASP.NET 应用程序连接字符串和 SQL Server 安全/权限的主要内容,如果未能解决你的问题,请参考以下文章

.NET / LINQ-SQL / ASP.NET 中的连接字符串地狱

在 Azure 中为 ASP.NET Core Web 应用设置 SQL 连接字符串

ASP.NET 使用 SqlConnection 连接 MySQL

ASP.NET 使用 SqlConnection 连接 MySQL

ASP.Net 模拟将连接字符串传递给 SQL Server 数据库

asp.net连接sql数据库的连接字符串怎么写啊?