与数据库进行父子进程通信的最佳设计

时间:2011-03-18 03:54:04

标签: c# database wcf ipc

假设我们有父进程AA会重复输入usernamepassword,并在AllUsers数据库中查找它们,以确保username/password组合有效。然后A开始新的子流程B,并将username/password传递给它。 B需要来自数据库的更多信息,例如用户的agenickname

只允许A拥有数据库访问权限:

  • A从中获取所有信息 数据库并将其全部传递给B via 命令行字符串创建时 新的B。即使A没有 关心agenicknameB将解析字符串以获取字段。
  • A只能通过 username/passwordBA有WCF 允许B调用的服务 服务,使A访问 数据库并将信息返回B

AB是否都可以访问数据库:

  • A只手B username/password并允许B 访问数据库,以便它可以获得 age/nickname本身。

我们是否应该有多个数据库:

  • A只能访问AllUsers 数据库。但我们也有一个数据库 为每个用户。所以,10,000个用户= 10,000个数据库。 B仅访问 一个用户数据库 用户关心的。

请注意,只有一个A,但可能有数百或数千个B进程。我希望尽可能保持负载,即如果成千上万A需要与之交谈,我不希望B成为瓶颈。但我也担心有两个进程同时访问同一个数据库,似乎可能导致访问速度慢或数据损坏。

这些是我如何解决这个问题的想法。哪一个是最好的?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

数据库旨在处理多个同时访问。除非你做了一些奇怪的事情,否则我不明白为什么A和B不应该访问数据库,如果你的主要关注是避免瓶颈。

我会避免为每个用户建一个数据库,因为你可能会在同一台机器上运行很多(如果不是全部)实例。

我建议阅读数据库功能和扩展。

希望这有帮助。

答案 1 :(得分:1)

在我看来,如果可能的话,不应该以任何方式传输用户名和密码,而且在你的场景中似乎很容易避免它。首先,没有进程应该具有对AllUsers数据库的完全访问权限,因为它保留了安全敏感数据。一种好的方法是使用只有A有权访问的存储过程,将用户名和密码(哈希)作为参数传递。这样,如果进程A受到攻击,攻击者就无法简单地获取用户名和密码列表。他/她可以尝试暴力,但如果有足够安全的密码(和适当的监控),你应该有足够的时间来发现事件。如果它们是正确的,则存储过程应返回加密安全的随机会话令牌。这应该是唯一要传递的信息,而你的方式(WCF,命令行参数等)并不重要,选择你喜欢的任何东西。进程B应该能够通过将令牌作为参数的存储过程查询所需的任何信息,并根据您的需要返回过滤结果。例如,进程B应该只能读取自己的用户行但没有密码。添加一些最后的工作,如工作,以清除旧会话,你有一个既安全又易于维护的设计。