我认为这个问题没有万能的解决方案,您需要针对您遇到的特定问题分析并调整您的解决方案。
据我所知,没有已知的方法可以在客户端安全地存储您的连接信息,因为您的客户端是与服务器通信的“可信”部分。无论您如何存储信息,客户端都必须能够将其反转或将其直接发送到服务器,这也意味着潜在的攻击者可以重复该过程。此外,任何直接与您的数据库进行的外部通信都可能被拦截/黑客攻击。
我能想到的保护数据的最佳方法是使用 Web 服务(通过安全连接)作为控制与数据库通信的中间件 (which you need to secure),并添加逻辑来强制执行您希望达到的任何安全级别.如果需要,您可以根据帐户授予不同级别的访问权限。但主要的是它只允许安全/隔离操作。
为了保护 web 服务(中间件),有两个问题,身份验证和隔离。
认证
您可以按照 Steven 的建议使用标准的 .NET 身份验证。我通常更喜欢推出自己的解决方案,但原因有两个。首先,到目前为止,我主要处理的是更复杂的用户/角色。例如,使用基于权限的角色,以便您可以检查权限而不是特定角色。
其次,它为您提供了更多控制权。您可以avoid session based authentication,也可以使用challenge-response,例如用时间戳挑战并期望时间戳+密码(用户必须在应用程序启动时输入)或其他一些创造性组合作为答案的哈希值,我是确保有更好的哈希组合可以响应。这也应该以两种方式完成,以确保客户端验证它从服务器获得的任何内容。
还有一些关于 WCF 授权的 SO 主题可能很有趣:
WCF Service authorization patterns
Authorization and Authentication using WCF
WCF Authorization - access to operations via claims
还有a book 和a paper(不是免费的)
隔离
无论您的身份验证有多安全,总有可能有人能够出于恶意目的访问您的网络服务。据我所知,这个问题没有唯一的解决方案,但它取决于具体的应用程序以及数据的结构和用户之间的共享方式。
您需要确定隔离层,以便用户不会相互影响或影响整个系统,以及应用程序的使用方式。客户端需要写入数据还是只读取数据?如果他们写入,写入的数据是否以任何方式共享,您可以通过什么方式隔离/验证该数据?如果他们阅读,信息是对用户私有、对系统私有还是在用户之间共享?
例如,用于存储医学期刊或个人任务列表的系统将具有非常孤立的数据,您可以限制仅访问您的私人信息(可能还有您的医生/老板,具体取决于用户组)。在这种情况下,您可以隔离对特定用户的所有数据读取/写入,因此攻击者只能影响自己的数据,从而确保其他人的安全。
如果数据在用户之间共享,您将需要某种方式来验证用户提供的输入。最好您还应该为用户提供某种信任级别,例如 SO 的声誉,以防止任何一次性用户尝试黑客攻击。这实在是太具体了,无法给出任何好的建议。
您还需要正确地验证您收到的输入,以防止诸如buffer overflow hacks 和SQL injections 之类的黑客攻击。虽然我不知道缓冲区溢出是否是 .NET 的问题,但使用 LINQ-to-SQL 应该可以轻松预防 SQL 注入。
总而言之,没有 100% 有保证的方式来保护您的数据,您应该定期备份(与数据库分开)您的数据,以防万一您受到威胁,可能还有事务日志。
最后的建议是,如果您对安全性非常认真,您可能应该聘请安全顾问并了解银行如何设置其安全基础设施。
您仍然可以通过 LINQ to ADO.NET 将 LINQ 与 Web 服务一起使用,尽管我自己没有尝试过。
这个链接可能更能解释How to move from LINQ to SQL to “LINQ to WCF”?