Skip To Content

Применение стандартизированных SQL-запросов

ArcGIS Server включает опцию безопасности, которая принуждает разработчиков при работе с картографическим сервисом, сервисами объектов, изображений и WFS через REST или SOAP использовать стандартизированные SQL-запросы. Это позволяет упростить запросы разработчиков и приложений к сервисам ArcGIS Server и помогает предотвращать SQL-атаки. Стандартизированные запросы используются по умолчанию, однако, они могут быть отключены администратором сервера.

Стандартизированные запросы

При активации стандартизированных запросов, ArcGIS Server проверяет стандартный синтаксис и не допускает использования функций и синтаксиса, специфичных для баз данных. Если вы являетесь разработчиком приложений и в настоящее время используете функции и синтаксис, специфичные для базы данных, вы должны обновить предложения where в коде вашего приложения, чтобы использовать стандартный синтаксис SQL, поддерживаемый ArcGIS. Либо можно отключить для ArcGIS Server проверку стандартизированных запросов.

Ограничения стандартизированных запросов

Стандартизированные запросы применяются ко всему сайту ArcGIS Server и не могут быть включены для одних сервисов и выключены для других.

Стандартизированные запросы не поддерживаются в соединениях между различными рабочими областями. Также не поддерживаются таблицы базы данных, доступные с помощью файла подключения OLE DB. Если данные сервиса содержат такие источники, вы должны использовать альтернативные методы для построения ссылок на данные.

Подзапросы, такие как выражение where, например, POP_2010 = (SELECT min(POP_2010)) FROM counties, не поддерживаются.

Напишите стандартизированный запрос

В таблице в конце этого раздела описано, какие функции SQL поддерживаются в ArcGIS Server. Вы можете использовать эту таблицу, чтобы понять, какие функции SQL можно использовать для создания стандартизированных запросов, которые можно использовать для картографических сервисов, сервисов объектов, изображений и WFS в ваших приложениях.

Определите, используются ли стандартизированные запросы в ArcGIS Server

Как указано выше, стандартизированные запросы включены по умолчанию и применяются ко всем картографическим сервисам, сервисам объектов, изображений и WFS на сайте ArcGIS Server. Администратор сервера может убедиться, что используются стандартные запросы, войдя в ArcGIS Server Administrator Directory и перейдя в system > properties > update. Если в диалоговом окне Свойства системы отсутствует свойство системы или указано {"standardizedQueries": "true"}, значит, стандартизированные запросы включены.

Или администраторы, разработчики приложений и клиенты могут проверить, используются ли стандартизированные запросы, открыв сервис с помощью ArcGIS Server Services Directory и просмотрев свойство Использовать стандартизированные запросы. Для картографических сервисов, сервисов объектов и WFS свойство можно просмотреть, обратившись к определенному слою или таблице в сервисе, например, https://gisserver.domain.com:6443/arcgis/rest/services/folder/service/service type/0. Для сервисов изображений свойство доступно в конечной точке сервиса, например, https://gisserver.domain.com:6443/arcgis/rest/services/folder/service/ImageServer.

Для получения инструкций о порядке доступа к Administrator Directory и выключении стандартизированных запросов обратитесь к следующей части данного раздела.

Отключить стандартизированные запросы

Если вам нужно использовать в приложении выражения where, специфичные для базы данных, вы можете отключить стандартизированные запросы в ArcGIS Server Administrator Directory. Для этого проделайте следующее.

Внимание:

Отключив опцию безопасности, вы сделаете ваш сайт более уязвимым по отношению к SQL-атакам.

Примечание:

Отключение стандартизированных запросов в размещенных сервисах объектов в ArcGIS Enterprise не поддерживается.

  1. Откройте Administrator Directory и войдите в систему с правами администратора вашего сайта.

    Administrator Directory обычно доступен по адресу https://gisserver.domain.com:6443/arcgis/admin.

  2. Щелкните система > свойства > обновить.
  3. На странице Operation (операция) – update (обновить) введите в диалоговом окне Свойства системы (System Properties) следующую строку:

    {"standardizedQueries": "false"}

  4. Щёлкните Обновить.
  5. Перезапустите ArcGIS Server.

Теперь ваш сайт позволяет пользователям посылать нестандартизированные запросы к картографическим сервисам, сервисам объектов, изображений и WFS. Чтобы снова включить стандартизированные запросы, повторите описанные выше шаги еще раз, но установите для свойства standardizedQueries значение true.

SQL-функции, поддерживаемые в ArcGIS Server

В следующем списке приведены поддерживаемые ArcGIS Server SQL-функции и их синтаксис. При использовании следующих функций и синтаксиса в приложениях, ArcGIS Server конвертирует их в соответствии со спецификациями базы данных, используемой в этом сервисе.

Эти функции применяются к веб-ервисам ArcGIS Server, а не к размещенным веб-слоям.

Тип функцииФункцияОписаниеПримерПримечания

Дата

CURRENT_DATE

Возвращает текущую дату в часовом поясе сеанса.

Datefield < CURRENT_DATE

Поддерживается только следующий синтаксис даты и временной метки:

date 'гггг-мм-дд', например, Datefield = date '2012-05-29'

timestamp 'гггг-мм-дд чч:мм:сс', например, Datefield = timestamp '2012-05-29 15:14:25'

CURRENT_TIMESTAMP

Возвращает текущее локальное время.

Timestampfield < CURRENT_TIMESTAMP

EXTRACT(extract_field FROM extract_source)

Возвращает одну из частей даты/времени, например год, месяц, день, час, минута и т.д.

Аргументом extract_field может быть одно из следующих ключевых слов: YEAR, MONTH, DAY, HOUR, MINUTE или SECOND.

Поиск по всем строкам, начиная с ноября:

EXTRACT(MONTH FROM Datefield) = 11

Математические

ABS(numeric_exp)

Возвращает абсолютное (положительное) значение определенного числового выражения.

CEILING(numeric_exp)

Возвращает минимальное целое значение, которое больше или равно указанному числовому выражению.

FLOOR(numeric_exp)

Возвращает самое большое целое, меньшее или равное указанному числовому выражению.

LOG(float_exp)

Возвращает натуральный логарифм указанного выражения с плавающей запятой.

LOG10(float_exp)

Возвращает десятичный логарифм указанного выражения с плавающей запятой.

POWER(numeric_exp, integer_exp)

Возвращает значение указанного выражения в заданной степени.

POWER(Numericfield, 2) = 16

ROUND(numeric_exp, integer_exp)

Возвращает числовое значение, округленное до указанной длины или точности.

TRUNCATE(numeric_exp, integer_exp)

Возвращает числовое значение, без округления до указанной длины или точности.

String

CHAR_LENGTH(string_exp)

Возвращает длину входной строки в символах.

CONCAT(string_exp1, string_exp2)

Возвращает строку, которая является результатом объединения двух или более строковых значений.

LOWER(string_exp)

Возвращает символьное выражение после конвертации прописных символьных данных в строчные.

SUBSTRING(string_exp FROM start FOR length)

Возвращает часть символьного или текстового выражения.

Поиск всех строк. в которых первые два символа после значений в Stringfield равны Ch:

SUBSTRING(Stringfield FROM 1 FOR 2)='Ch'

UPPER(string_exp)

Возвращает символьное выражение, полученное после конвертации символов нижнего регистра в символы верхнего регистра.