如何保护C#应用程序访问的sql服务器

时间:2011-10-26 12:30:54

标签: c# sql-server security

简单而做作的例子:

C#桌面应用程序与SQL Server数据库对话。所有订单都存在于订单表中。

应用程序视图,创建和修改订单。在此示例中,用户只能修改自己的订单

关注:

如果使用专用的sql凭据,则存储连接字符串。 即使使用了用户凭证,也可以通过直接通过Excel或Access连接来绕过应用程序安全性。

解决方案:

仅通过Web服务/中间件提供对SQL的访问。好,但在这种情况下不一定可行。

在应用程序的某处加密连接字符串。通过默默无闻的安全性不是很大。

通过授予对特定存储过程,视图等的访问权限来保护数据库,并且无法访问实际表。 SP和视图考虑了用户的权限/凭证。太可怕了。好的简单示例(选择用户,在介绍不同组中的用户,经理关系等时变得复杂)

备选方案:

你会怎么做?

由于

4 个答案:

答案 0 :(得分:5)

  

即使使用了用户凭据,也可以使用应用程序安全性   通过直接通过Excel或Access

连接来绕过
你是什​​么意思?您不应该允许用户直接连接到SQL Server或使用Excel或Access。他们不应该知道sa或其他密码。

在此之后,您肯定可以加密应用的某些部分,配置以便没有人可以看到其内容。

我真的有这样的逻辑:用户只能在应用程序级别修改他/她自己的订单。也可以在我猜的存储过程中完成,但它取决于更多细节应该知道这个建议最佳或最合适的方法。

答案 1 :(得分:3)

使用Windows身份验证而不是sql身份验证。

要允许用户仅查看他们的数据,您可以使用SYSTEM_USER创建基于当前登录用户的视图和过滤数据,仅获取当前用户的数据,并拒绝表本身的选择权限。

答案 2 :(得分:1)

您无法在SQL Server中执行行级安全性(you can},但这并不简单)。因此,您完全安全的唯一选择是通过控制访问的数据层。您可以加密存储您的凭据,但这并不完全安全,正如您所说。这取决于你的需要。

答案 3 :(得分:1)

在我们的应用程序中,我们处理存储加密在文件中的连接字符串。 因此用户无法直接访问此文件。 我们还仅对我们的数据库使用sql连接,并仅为此授予用户。

如果您使用Windows凭据来访问它并希望阻止任何操作,则可以禁止对表的写访问权限。 要读取数据,您可以构建查询或访问表。

对于写入/添加/操作数据,您可以创建存储过程。其中一个参数是用户名。在构建业务逻辑的过程中,模拟具有最终写入/更新数据的写访问权限的用户。 在SQL服务器中有你的“层”。 但我不建议采取这种方式:)这是可能的,但数据库内的许多业务逻辑imho。因此,最安全的方法是使用您的语言找到一个好的加密类,只使用sql auth并将这些数据存储在您的代码中。