ArcGIS Server 中包含一个安全选项,可强制开发人员在通过 REST 或 SOAP 使用地图、要素、影像和 WFS 服务时使用标准化 SQL 查询。此选项使开发人员和应用程序查询 ArcGIS Server 服务更为简便,并有助于防止 SQL 注入攻击。默认情况下强制使用标准化查询,但是服务器管理员可以禁用标准化查询。
标准化查询对我有怎样的影响?
启用标准化查询后,ArcGIS 将检查标准语法,并且不支持数据库特定的函数和语法。如果您是一名应用程序开发人员,并且正在使用数据库特定函数和语法,则需要更新应用程序代码中的 where 子句以使用 ArcGIS 所支持的常规 SQL 语法。此外,还可以禁止 ArcGIS Server 检查标准化查询。
标准化查询限制
标准化查询会应用于整个 ArcGIS Server 站点;不会只对某些服务启用而对其他服务禁用标准化查询。
不同工作空间之间的连接不支持标准化查询。此外,也不支持通过 OLE DB 连接文件访问的数据库表。如果服务数据包含这些源,则需要使用替代方法来引用数据。
不支持子查询作为 where 子句,如 POP_2010 = (SELECT min(POP_2010) FROM counties。
如何编写标准化查询?
以下主题将介绍 ArcGIS Server 中支持的 SQL 函数:
此文档能够帮助您了解哪些 SQL 函数可用于生成标准化查询,这些标准化查询可用于应用程序中的地图、要素、影像以及 WFS 服务。
如何知道 ArcGIS Server 是否正在使用标准化查询?
如上所述,标准化查询为默认启用并应用于 ArcGIS Server 站点中的所有地图、要素、影像以及 WFS 服务。但是,服务器管理员可通过登录到 ArcGIS Server 管理员目录并导航至系统 > 属性 > 更新,来验证正在使用的标准化查询。如果系统属性对话框未显示系统属性或显示 {"standardizedQueries": "true"},则标准化查询处于开启状态。
除此之外,管理员、应用程序开发人员和客户可通过使用 ArcGIS Server 服务目录访问服务并查看使用标准化查询属性,来验证是否正在使用标准化查询。对于地图、要素和 WFS 服务,可通过访问服务中的特定图层或表来查看此属性,例如,http://gisserver.domain.com:6080/arcgis/rest/services/folder/service/service type/0。对于影像服务,可在服务端点找到此属性,例如以下端点:http://gisserver.domain.com:6080/arcgis/rest/services/folder/service/ImageServer。
有关如何访问管理员目录的说明或了解如何禁用标准化查询的信息,请参阅该主题的下一部分。
禁用标准化查询
如果需要在应用程序中使用数据库特定的 where 子句语句,可以通过访问 ArcGIS Server 管理员目录禁用标准化查询。要执行此操作,请遵循以下说明。
警告:
禁用此安全选项,您的站点更易受到 SQL 注入攻击。
注:
ArcGIS Enterprise 中的托管要素服务不支持禁用标准化查询。
- 打开管理员目录,然后以具有管理权限的用户身份登录到站点。管理员目录通常位于 http://gisserver.domain.com:6080/arcgis/admin。
- 单击系统 > 属性 > 更新。
- 在操作 - 更新 页面,在系统属性对话框中输入以下字符串:
{"standardizedQueries": "false"}
- 单击更新。
- 重新启动 ArcGIS Server。
现在您的站点已配置为允许用户使用非标准化查询向地图、要素、影像以及 WFS 服务发送请求。要重新启用标准化查询,请重复执行以上说明并将 standardizedQueries 属性设置为true。