Skip To Content

Aplicar las consultas SQL estandarizadas

ArcGIS Server incluye una opción de seguridad que obliga a los desarrolladores a usar consultas SQL estandarizadas para trabajar con servicios de mapas, entidades, imágenes y WFS a través de REST o SOAP. Esto facilita las consultas a los servicios de ArcGIS Server por parte de los desarrolladores y las aplicaciones y también ayuda a evitar los ataques por inyección de SQL. Las consultas estandarizadas están activadas de forma predeterminada, pero el administrador del servidor puede deshabilitarlas.

Consultas estandarizadas

Si las consultas estandarizadas están habilitadas, ArcGIS Server comprueba la sintaxis estándar y no permite sintaxis ni funciones específicas de la base de datos. Si, como desarrollador de aplicaciones, utiliza actualmente la sintaxis y las funciones específicas de la base de datos, deberá actualizar las cláusulas WHERE en el código de la aplicación para usar la sintaxis de SQL común admitida por ArcGIS. Como alternativa, puede deshabilitar que ArcGIS Server compruebe que las consultas sean estandarizadas.

Limitaciones de las consultas estandarizadas

Las consultas estandarizadas se aplican a todo el sitio de ArcGIS Server. No se pueden habilitar para algunos servicios y deshabilitar para los demás.

Las consultas estandarizadas no se admiten en uniones entre espacios de trabajo diferentes. Además, no se admiten las tablas de base de datos a las que se accede mediante un archivo de conexión OLE DB. Si sus datos de servicio contienen estos orígenes, tendrá que usar métodos alternativos para hacer referencia a sus datos.

Las subconsultas como cláusula WHERE, por ejemplo, POP_2010 = (SELECT min(POP_2010) FROM counties, no son compatibles.

Escribir una consulta estandarizada

La tabla situada al final de este tema describe las funciones SQL compatibles con ArcGIS Server. Puede usar esta tabla como ayuda para saber qué funciones SQL se pueden usar para generar consultas estandarizadas que se puedan utilizar con servicios de mapas, entidades, imágenes y WFS en sus aplicaciones.

Determinar si ArcGIS Server usa consultas estandarizadas

Tal como se ha indicado anteriormente, las consultas estandarizadas están habilitadas de forma predeterminada y se aplican a todos los servicios de mapas, entidades, imágenes y WFS en el sitio de ArcGIS Server. Sin embargo, un administrador del servidor puede verificar que las consultas estandarizadas se utilizan iniciando sesión en el Directorio de administrador de ArcGIS Server y yendo a Sistema > Propiedades > Actualizar. Si no se muestra ninguna propiedad del sistema en el cuadro de diálogo Propiedades del sistema o aparece {"standardizedQueries": "true"}, significa que las consultas estandarizadas están habilitadas.

De forma alternativa, los administradores, desarrolladores de aplicaciones y clientes pueden verificar que las consultas estandarizadas se utilicen accediendo a un servicio a través del Directorio de servicios de ArcGIS Server y revisando la propiedad Usar consultas estandarizadas. Para servicios de mapas, entidades y WFS, la propiedad se puede revisar accediendo a una capa o tabla específicas del servicio, por ejemplo, https://gisserver.domain.com:6443/arcgis/rest/services/folder/service/service type/0. Para servicios de imágenes, la propiedad está disponible en el extremo de servicio, por ejemplo, https://gisserver.domain.com:6443/arcgis/rest/services/folder/service/ImageServer.

Puede consultar las instrucciones para acceder al Directorio de administrador o información sobre cómo inhabilitar las consultas estandarizadas en la sección siguiente de este tema.

Deshabilitar las consultas estandarizadas

Si necesita utilizar expresiones con cláusulas WHERE específicas de la base de datos en su aplicación, puede deshabilitar las consultas estandarizadas accediendo al Directorio de administrador de ArcGIS Server. Para ello, siga las instrucciones siguientes.

Precaución:

Si inhabilita esta opción de seguridad, su sitio será más vulnerable a posibles ataques por inyección de SQL.

Nota:

En ArcGIS Enterprise, no es posible deshabilitar las consultas estandarizadas para servicios de entidades alojados.

  1. Abra el Directorio de administrador e inicie sesión con un usuario que tenga permisos administrativos para el sitio.

    Por lo general, el Directorio de administrador está disponible en https://gisserver.domain.com:6443/arcgis/admin.

  2. Haga clic en system > properties > update.
  3. En la página Operación - actualizar, introduzca la cadena siguiente en el cuadro de diálogo Propiedades del sistema:

    {"standardizedQueries": "false"}

  4. Haga clic en Actualizar.
  5. Reinicie ArcGIS Server.

Ahora el sitio está configurado para permitir a los usuarios enviar solicitudes a servicios de mapas, entidades, imágenes y WFS utilizando consultas no estándar. Para volver a habilitar las consultas estandarizadas, repita las instrucciones anteriores, pero asigne el valor true a la propiedad standardizedQueries.

Funciones SQL admitidas en ArcGIS Server

La siguiente lista muestra qué funciones SQL son compatibles con ArcGIS Server y la sintaxis de cada una de ellas. Cuando se utilicen las siguientes sintaxis y funciones en las aplicaciones, ArcGIS Server las convertirá para adaptarlas a la especificación de la base de datos utilizada por el servicio.

Estas funciones se aplican a los servicios web de ArcGIS Server, no a las capas web alojadas.

Tipo de funciónFunciónDescripciónEjemploNotas

Fecha

CURRENT_DATE

Devuelve la fecha actual en la zona horaria de la sesión.

Datefield < CURRENT_DATE

Solo se admite la siguiente sintaxis de fecha y marca de tiempo:

fecha 'aaaa-mm-dd', por ejemplo, Campo de fecha = fecha '2012-05-29'

hora 'aaaa-mm-dd hh:mm:ss', por ejemplo, Campo de fecha = hora '2012-05-29 15:14:25'

CURRENT_TIMESTAMP

Devuelve la hora local actual.

Timestampfield < CURRENT_TIMESTAMP

EXTRACT(extract_field FROM extract_source)

Devuelve una sola parte de la fecha/hora, como año, mes, día, hora, minuto y demás.

El argumento extract_field puede ser una de las siguientes palabras clave: YEAR, MONTH, DAY, HOUR, MINUTE o SECOND.

Buscar todas las filas del mes de noviembre:

EXTRACT(MONTH FROM Datefield) = 11

Matemática

ABS(numeric_exp)

Devuelve el valor absoluto (positivo) de la expresión numérica especificada.

CEILING(numeric_exp)

Devuelve el número entero más pequeño que sea mayor o igual a la expresión numérica especificada.

FLOOR(numeric_exp)

Devuelve el entero más grande menor o igual que la expresión numérica especificada.

LOG(float_exp)

Devuelve el logaritmo natural de la expresión flotante especificada.

LOG10(float_exp)

Devuelve el logaritmo en base 10 de la expresión flotante especificada.

POWER(numeric_exp, integer_exp)

Devuelve el valor de la expresión especificada a la potencia especificada.

POTENCIA(Numericfield, 2) = 16

ROUND(numeric_exp, integer_exp)

Devuelve un valor numérico redondeado a la longitud o precisión especificada.

TRUNCATE(numeric_exp, integer_exp)

Devuelve un valor numérico sin redondear el valor a una longitud o precisión específica.

Cadena de caracteres

CHAR_LENGTH(string_exp)

Devuelve la longitud en caracteres de la cadena de entrada.

CONCAT(string_exp1, string_exp2)

Devuelve una cadena de caracteres que es el resultado de concatenar dos o más valores de cadena de caracteres.

LOWER(string_exp)

Devuelve una expresión de caracteres después de convertir datos de caracteres en mayúsculas a minúsculas.

SUBSTRING(string_exp FROM start FOR length)

Devuelve una parte de una expresión de caracteres o texto.

Buscar todas las filas cuyos dos primeros caracteres de los valores de Stringfield sean Ch:

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

MAY.(string_exp)

Devuelve una expresión de caracteres con los datos de caracteres en minúsculas convertidos a mayúsculas.