安全性注意事项

为了保证基于 Sync Framework 的数据库应用程序的安全性,建议您采取以下步骤。有关数据库安全性的更多信息,请参见 SQL Server Compact 联机丛书和 SQL Server 联机丛书。

  • 使用最少权限原则。不要授予比执行某项特定任务所需权限更多的权限。例如,不要授予对仅限下载同步所涉及的服务器数据库表的 INSERT 权限。同步操作要求以下权限:

    • 针对 Sync Framework 用于读取和写入元数据表和基表的所有存储过程的 EXECUTE 权限。

    • 针对在同步会话中将进行更新的元数据表和其他基表的 SELECT、INSERT、UPDATE 和 DELETE 权限。

    当设置使用 SqlSyncProvider 的 SQL Server 数据库时,请注意以下有关设置的权限要求:

    • 用于创建元数据表的 CREATE TABLE 权限:scope_infoscope_config 以及为每个基表创建的跟踪表。

    • 用于将触发器添加到基表的 ALTER TABLE 权限。

    • 用于创建 Sync Framework 所需过程的 CREATE PROCEDURE 权限。

    • 针对 scope_infoscope_config 表的 SELECT 和 INSERT 权限。

    • 针对基表的 SELECT 权限。

  • Sync Framework 不会对定义一组要同步的表(具有可选筛选器)的作用域的内容进行验证。在应用程序中包含逻辑,以验证要发送的作用域与应在该作用域内的表相对应且已应用所需的筛选器。

  • 对服务器和服务器数据库进行配置,尽可能减小暴露的攻击面。例如,如果将某台 Internet Information Services (IIS) 服务器作为某个 N 层体系结构的一部分,请勿启用文件传输协议 (FTP) 服务,除非使用该服务器的其他应用程序需要该服务。

  • 对磁盘上或传输中的敏感数据进行加密或使用密码进行保护。Sync Framework 没有提供加密连接的功能。可以利用多种技术在传输级别实现加密。这包括以下符合行业标准的技术:Windows Communication Foundation (WCF)、虚拟专用网 (VPN)、安全套接字层 (SSL) 以及 Internet 协议安全性 (IPsec)。在同步期间,建议使用上述加密方法之一建立连接。有关加密的更多信息,请参见 Windows 和 SQL Server Compact 的文档,以及要使用的服务器或对等数据库的文档。

  • 使用存储过程而不是内联 SQL 查询服务器数据库。存储过程在以下方面有助于保护应用程序的安全:

    • 通过使用存储过程,管理员可以定义一组为人熟知的数据库入口点。可以向用户授予对存储过程的访问权限,而不是对基础表的访问权限。

    • 此外,存储过程的使用还有助于参数的使用,而不是动态构建查询。这样便增加了执行 SQL 注入攻击的难度。

    • 如果应用程序受损害,不一定会损害数据访问逻辑。

  • 验证在同步期间发送的数据。通过使用在同步期间激发的事件,可以在将变更应用于目标数据库之前对变更进行验证。有关事件的更多信息,请参见如何处理事件和对业务逻辑进行编程

  • 在 N 层体系结构中,建立本地程序集和远程程序集之间的信任。在 N 层方案中,应该构建本地程序集和远程程序集之间的信任关系。构建信任关系的机制不属于 Sync Framework API 的功能范畴,必须由应用程序负责处理。

  • 如果您将 Windows Communication Foundation (WCF) 用于 N 层应用程序,建议遵循下列指导原则:

    • 对您的服务使用的 WCF 命名空间设置相应的权限。创建新的命名空间或确保默认的命名空间具有适当的权限集。

    • 基于专用帐户(只具有访问同步中涉及的数据库所需的权限以及在对同步变更执行批处理时使用的任何假脱机文件)运行 WCF 服务。

    • 将专用的应用程序池用于 WCF 服务,以便将同步进程与在中间层服务器上正运行的任何其他服务隔离开来。

    • 使用 WCF 限制来帮助避免针对 Web 服务的拒绝服务 (DOS) 攻击。限制用于控制服务的用户可使用的资源。

    • 请用受限制的保留项替换默认 WCF URL 保留项。有关更多信息,请参见此 Microsoft 文章

    有关更多信息,请参见 WCF 文档。

  • 如果使用跟踪,请注意跟踪文件可能包括与服务器和客户端计算机、应用程序数据以及登录有关的信息。(密码不写入跟踪文件。)如果启用详细跟踪,则数据库中每个已变更的行都将写入跟踪文件。通过使用相应的访问控制列表帮助保护跟踪文件。有关跟踪的更多信息,请参见如何跟踪同步过程

  • 对于客户端与服务器同步,在客户端应用程序中明确设置 ClientId 属性(如果可以)。如果未设置该属性,将由 Sync Framework 分配一个 ID。在这种情况下,客户端应用程序必须能够访问服务器的以下注册表配置单元:HK_CURRENT_USER\Software\Microsoft\Microsoft SQL Server Compact Edition\v3.5。访问注册表配置单元需要管理员权限。我们不建议这么做。

  • 如果为要同步的表确定筛选器,请记住这些问题:

    • Sync Framework 不会对为作用域筛选器指定的 SQL 字符串进行验证。开发人员应遵循专用于防止恶意字符串的最佳方法。有关更多信息,请参见此 MSDN 文章

    • 不要依赖筛选实现安全性。基于客户端或用户 ID 筛选数据的能力并不是一种安全功能。换句话说,这种方法不能用来防止某个客户端或对等方读取属于其他客户端或对等方的数据。这种类型的筛选仅适用于数据分区和减少同步的数据量。

请参阅

概念

应用程序设计和部署注意事项