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 не поддерживается.
- Откройте Administrator Directory и войдите под пользователем, имеющим права администратора вашего сайта . Administrator Directory обычно доступен по адресу https://gisserver.domain.com:6443/arcgis/admin.
- Щелкните система > свойства > обновить.
- На странице Operation (операция) – update (обновить) введите в диалоговом окне Свойства системы (System Properties) следующую строку:
{"standardizedQueries": "false"}
- Щелкните Обновление.
- Перезапустите 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) | Возвращает числовое значение, без округления до указанной длины или точности. | |||
Строка | 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) | Возвращает символьное выражение, полученное после конвертации символов нижнего регистра в символы верхнего регистра. |