C#/ SQL Server中的客户端/服务器安全性

时间:2016-08-22 08:27:22

标签: c# mysql sql-server security

我在Windows 2008 R2计算机上运行了一个SQL Server,需要在其上运行基本查询(SELECT / INSERT / UPDATE)。这些操作由客户端直接执行,客户端是用C#编写的应用程序,安装在不同位置的一台计算机上,因此连接是通过Internet进行的。

由于在DB上运行的操作的性质非常简单,我宁愿不在SQL Server上编写后端。所以安全设置:

1)用户名和密码写在客户端并提交。

2)在服务器上运行(参数化)查询,并将密码哈希和盐返回给客户端。

3)附加密码和salt,使用SHA_512进行哈希处理,并与密码哈希进行比较。

4)如果两者匹配,您可以访问创建和发送查询的工具集。

在稍微研究一下这个话题后,我觉得这个系统存在一些安全漏洞,但我无法准确指出这些漏洞可能是什么。

3 个答案:

答案 0 :(得分:2)

根据您的方案,我会考虑为您的应用程序的每个用户创建SQL帐户。当用户登录到您的应用程序时,在构造SQL Server连接字符串时使用这些凭据并允许服务器执行凭据验证。这通常被称为pass-thru身份验证。

更好的是,如果您的应用程序将由与SQL Server相同的Active Directory域上的用户执行,您可以使用更安全的Windows集成安全性(您当前用于本地测试的那些),并且用户将不需要完全登录。该连接将仅使用其当前的AD凭据。有关使用Windows域凭据在SQL Server中设置用户帐户的详细信息,请参阅此链接:https://msdn.microsoft.com/en-us/library/dd787978.aspx

此外,使用任一选项,您仍然希望使用受TLS保护的连接(Encrypt = true)来帮助防止通过网络窥探凭证。

答案 1 :(得分:0)

如果我理解正确,那么整个密码检查在客户端完成。那是对的吗?如果是这样,它似乎可能不安全。

你完全相信客户本身吗?如果未经授权的人可以访问客户端,或者创建另一个模仿客户端的客户端,那么这会大大增加他们访问服务器端的机会。

毫无疑问,创建后端系统会更安全,即使它只是一个非常简单的代理服务,只需检查用户名和密码,然后按原样转发查询本身。

这样,密码哈希和盐永远不会离开服务器。

答案 2 :(得分:0)

直接连接到SQL Server的客户端不安全。如果客户端位于本地硬盘驱动器上,则可能会被黑客入侵。

你没有找到你想要做的工具,因为它不是一个好的设计。

不要理解“由于在DB上运行的操作的性质如此简单,我宁愿不在SQL Server上编写后端。”如果这很容易那就是设置后端的原因。

.NET拥有完整的基础架构。 Windows Communication Foundation。