1

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

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

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

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

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

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

4

3 回答 3

1

您需要通过密钥交换进行公钥加密。我们有一个支持这一点的安全服务器(带有 SOAP 接口的 Java 程序)。有满足此要求的商业产品——您必须将它们集成到您的系统中。密码永远不应该像那样到处都是硬编码。

于 2012-10-04T19:52:11.063 回答
1

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

于 2012-10-04T19:52:34.757 回答
0

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

现在有了这些信息,我将重新构建我的设置,使其符合以下原则:

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

于 2012-10-05T13:38:04.363 回答