客户端和服务器之间传递的本地数据库密码解决方案

时间:2012-10-04 19:44:13

标签: c++ security passwords sql-server-ce

我一直在研究一个项目,该项目使用在客户端之间发送的sqlce数据库,需要脱机工作,以及存储信息数据库的服务器,数据库受密码保护。

困难的部分是,我们有一个业务要求,用户在报告sqlce数据库中的信息之前不必更新到最新版本,甚至可能落后于最新版本的客户端几代服务器访问数据库中报告的信息所需的更新密码。

我们目前的解决方案是在源代码中,在客户端和服务器上使用相同的静态密码,并保持它们的相同,以便向后兼容。

我的问题是关于在客户端和服务器之间同步密码的安全方法,并保持旧数据库的向后兼容性,或者能够从数据库中获取一些参数以查看应该匹配的密码。

我们暂时使用sql ce 3.1和C ++。其他技术(SQLight?C#?Java?)中同样问题的解决方案是受欢迎的,因为我认为问题可以应用于其他项目。

我希望我的问题很清楚,那里有很多答案,如果有什么我需要澄清的只是问我!

3 个答案:

答案 0 :(得分:1)

您需要使用密钥交换进行公钥加密。我们有一个支持此功能的安全服务器(带有SOAP接口的Java程序)。有些商业产品可以满足这一要求 - 您必须将它们集成到您的系统中。密码永远不应该在那个地方进行硬编码。

答案 1 :(得分:1)

我建议用户,登录SQL的每个用户在数据库中都有自己的用户,因此可以保留其密码。您作为在用户会话之外执行某些操作的代码可以使用存储在配置文件中的可配置连接字符串来管理您的密码,并且由于某些工具用户可以更新它,因此例如管理员可以随时更改他/她的密码数据库和您的代码可以正常工作。另一方面,如果您有服务器/客户端设计,那么服务器可以使用可信连接并通过登录用户维护其安全性,并且永远不需要在代码中保存密码。

答案 2 :(得分:0)

所以有一些事情。
1)永远不要在源代码中硬编码密码,像我这样的人会找到它们 2)服务器不应该进入客户端数据库,客户端应该始终向服务器报告。

现在掌握了这些信息,我将重新设计我的设置,使其符合以下几点:

每个客户端都会发送您用于获取报告的每日,每周或任何时间指标。这减轻了密码管理方面的任何问题。此外,通过这样做,服务器可以保留允许客户端的白名单,这可以防止未经授权或无效的客户端向主服务器报告。现在使用它并不重要,因为服务器肯定不关心客户端,并且您的消息传递结构不应该改变那么多。如果是,您可能应该强制客户端更新。