SQLXML 核心安全性注意事项

适用于:SQL ServerAzure SQL 数据库

以下是使用 SQLXML 进行数据访问的安全性准则。

  • SQLXMLOLEDB 提供程序公开 StreamFlags 属性,该属性允许您设置标志,指示应为每个特定实例启用或禁用哪些 SQLXML 功能。 您可以使用此属性自定义对 SQLXML 的使用,并确保只启用所需组件。 有关详细信息,请参阅 SQLXMLOLEDB 提供程序 (SQLXML 4.0)

  • 当出现 SQLXML 错误并返回这些错误时,它们可以包含有关数据库架构的信息,如表名、列名或类型信息。 处理这些错误时,应小心谨慎,以便用户不会轻易发现有关SQL Server安装的信息,而不需要这些信息。

  • 当用于查询或向SQL Server发送更新时,SQLXML 不会对可以交换的数据量设置任何限制,并且不会在尝试处理 SQLXML 有效负载之前对数据大小进行任何检查。 使用 SQLXML 开发应用程序时,您有责任确保系统上有足够的内存来处理该数据。 例如,查询服务器上的数据时,应验证客户端上是否具有足够的内存空间来接收该数据。 同样,如果向服务器加载数据,则需要验证该服务器上是否具有足够的可用内存来处理该数据,并且该服务器上是否具有足够的可用磁盘存储空间来存储该数据。

  • SQLXML 动态生成 Transact-SQL 查询和更新命令,并将其发送到SQL Server以供执行。 这是 SQLXML 查询和更新服务器的唯一方式。 结果将以 XML 流或行集的形式接收。

  • 当接收查询结果时,SQLXML 不会根据收到的数据内容执行任何操作。 不会根据数据类型或内容执行额外的处理。 该数据永远不会作为执行操作所使用的代码处理。

  • 执行 XML 模板时,SQLXML 会将提交的模板中包含的 XPath 和 DBObject 查询转换为 Transact-SQL 命令,然后针对SQL Server执行这些命令。 这些命令仅影响现有数据。 SQLXML 生成的命令永远不会更改数据库的结构。 用户必须执行显式命令才能更改数据库结构。 例如,将它们包含在模板的 sql:query 块中。

  • 当通过映射文件执行 DBObject 查询和 XPath 语句时,SQLXML 不会以任何方式更改数据库中的数据。

  • SQLXML 可以根据 XML 和SQL Server数据模型之间的差异对给定数据进行格式设置更改。 例如,二者指定时间所采用的格式各不相同。 SQLXML 将尝试解析这些差异。 因此,可能会丢失某些精度信息。

  • SQLXML 未限制其处理数据所需的时间长短。 处理将继续进行,直到出现错误或处理完成为止。

  • SQLXML 未能写入文件系统。 如果用户希望保存从数据库检索到的数据,则必须使用用户自己的代码来执行此操作。

  • SQLXML 允许用户对数据库执行所需的任何 SQL 查询。 此功能决不能向不安全或不受控制的源公开,因为这实质上是公开 SQL 数据库,而不限定任何用户。

  • 执行 Updategram 时,SQLXML 针对 SQL Server 实例将 updg:sync 块转换为 DELETE、UPDATE 和 INSERT 命令。 这些命令仅影响现有数据。 SQLXML 生成的命令永远不会更改数据库。 用户必须执行显式命令才能更改数据库结构。 例如,将它们包含在模板的 sql:query 块中。

  • 执行 DiffGrams 时,SQLXML 针对 SQL Server 实例将 DiffGram 转换为 DELETE、UPDATE 和 INSERT 命令。 这些命令仅影响现有数据。 SQLXML 生成的命令永远不会更改数据库。 用户必须执行显式命令才能更改数据库结构。 例如,将它们包含在模板的 sql:query 块中。

另请参阅

SQLXML 4.0 安全注意事项