SQLXML 核心安全性注意事项
适用于: SQL Server
Azure SQL 数据库
以下是使用 SQLXML 进行数据访问的安全性准则。
SQLXMLOLEDB 提供程序公开一个 StreamFlags 属性,该属性允许设置指示应为每个特定实例启用或禁用哪些 SQLXML 功能的标志。 您可以使用此属性自定义对 SQLXML 的使用,并确保只启用所需组件。 有关详细信息,请参阅 SQLXMLOLEDB 提供程序(SQLXML 4.0)。
当出现 SQLXML 错误并返回这些错误时,它们可以包含有关数据库架构的信息,如表名、列名或类型信息。 处理这些错误时,应小心谨慎,以便用户无法轻松发现有关 SQL Server 安装的信息,因为用户不需要或不需要安装 SQL Server。
用于查询或向 SQL Server 发送更新时,SQLXML 不会对可以交换的数据量设置任何限制,并且不会在尝试处理 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 会将 updg:sync 块转换为针对 SQL Server 实例的 DELETE、UPDATE 和 INSERT 命令。 这些命令仅影响现有数据。 SQLXML 生成的命令永远不会更改数据库。 用户必须执行显式命令才能更改数据库结构。 例如,通过在模板的 sql:query 块中包含它们。
执行 DiffGrams 时,SQLXML 会将 DiffGram 转换为针对 SQL Server 实例的 DELETE、UPDATE 和 INSERT 命令。 这些命令仅影响现有数据。 SQLXML 生成的命令永远不会更改数据库。 用户必须执行显式命令才能更改数据库结构。 例如,通过在模板的 sql:query 块中包含它们。