Skip To Content

Appliquer des requêtes SQL standardisées

ArcGIS Server propose une option de sécurité qui force les développeurs à utiliser des requêtes SQL standardisées lorsqu’ils utilisent des services de carte, d’entités, d’imagerie et WFS via REST ou SOAP. Cela facilite l’interrogation des services ArcGIS Server par les développeurs et les applications et permet d’empêcher les attaques par injection de code SQL. Les requêtes standardisées sont appliquées par défaut, mais elles peuvent être désactivées par l'administrateur du serveur.

A propos des requêtes standardisées

Lorsque les requêtes standardisées sont activées, ArcGIS Server recherche la syntaxe standard et n’autorise pas la syntaxe et les fonctions spécifiques à la base de données. Si vous développez des applications et que vous utilisez une syntaxe et des fonctions spécifiques à la base de données, vous devez mettre à jour les clauses WHERE du code de votre application pour qu’elles utilisent la syntaxe SQL normale prise en charge par ArcGIS. Sinon, vous pouvez désactiver sur ArcGIS Server la fonction de recherche de requêtes standardisées.

Limites des requêtes standardisées

Les requêtes standardisées sont appliquées au site ArcGIS Server dans sa totalité. Elles ne peuvent être activées pour certains services et désactivées pour d’autres.

Les requêtes standardisées ne sont pas prises en charge sur les jointures entre différents espaces de travail. En outre, les tables de bases de données dont l’accès est possible via un fichier de connexion OLE DB ne sont pas prises en charge. Si vos données de service contiennent ces sources, vous devez utiliser d'autres méthodes pour référencer vos données.

Les sous-requêtes sous forme de clause WHERE, par exemple POP_2010 = (SELECT min(POP_2010) FROM counties ne sont pas prises en charge.

Comment puis-je rédiger une requête standardisée ?

Le tableau à la fin de cette rubrique décrit les fonctions SQL prises en charge dans ArcGIS Server. Vous pouvez vous y reporter pour savoir quelles fonctions SQL employer pour générer des requêtes standardisées pouvant être utilisées sur des services de carte, d’entités, d’imagerie et WFS dans vos applications.

Comment puis-je savoir si des requêtes standardisées sont utilisées par ArcGIS Server ?

Comme nous l’avons indiqué ci-dessus, les requêtes standardisées sont activées par défaut et s’appliquent à tous les services de carte, d’entités, d’imagerie et WFS du site ArcGIS Server. Toutefois, un administrateur de serveur peut vérifier que des requêtes standardisées sont utilisées en se connectant au répertoire administrateur de ArcGIS Server et en accédant à System (Système) > Properties (Propriétés) > Update (Mettre à jour). Si aucune propriété système n’apparaît dans la boîte de dialogue System Properties (Propriétés système) ou que la mention {"standardizedQueries": "true"} apparaît, cela signifie que les requêtes standardisées sont activées.

Pour savoir si des requêtes standardisées sont utilisées, les administrateurs, développeurs d’applications et clients peuvent également accéder à un service via le répertoire des services ArcGIS Server et examiner la propriété Use Standardized Queries (Utiliser des requêtes standardisées). Pour les services de carte, d’entités et WFS, la propriété est accessible par l’intermédiaire d’une couche ou table spécifique du service, par exemple, https://gisserver.domain.com:6443/arcgis/rest/services/folder/service/service. Pour les services d’imagerie, la propriété est disponible à l’extrémité du service, par exemple, https://gisserver.domain.com:6443/arcgis/rest/services/folder/service/ImageServer.

Pour savoir comment accéder au répertoire d'administrateur ou désactiver les requêtes standardisées, reportez-vous à la section suivante de cette rubrique.

Désactiver les requêtes standardisées

Si vous devez utiliser des instructions de clauses WHERE spécifiques à la base de données dans votre application, vous pouvez désactiver les requêtes standardisées en accédant au répertoire administrateur de ArcGIS Server. Pour ce faire, suivez les instructions ci-après.

Attention :

En désactivant cette option de sécurité, votre site est plus exposé aux attaques par injection de code SQL.

Remarque :

La désactivation des requêtes standardisées n’est pas prise en charge pour les services d’entités hébergés dans ArcGIS Enterprise.

  1. Ouvrez le répertoire d’administrateur et ouvrez une session en tant qu’administrateur sur votre site. Le répertoire d'administrateur est généralement disponible à l'adresse https://gisserver.domain.com:6443/arcgis/admin.
  2. Cliquez sur système > propriétés > mettre à jour.
  3. Sur la page Opération - mise à jour, entrez la chaîne suivante dans la boîte de dialogue System Properties (Propriétés système) :

    {"standardizedQueries": "false"}

  4. Cliquez sur Mettre à jour.
  5. Redémarrez ArcGIS Server.

Votre site est désormais configuré pour permettre aux utilisateurs d’envoyer des requêtes aux services de carte, d’entités, d’imagerie et WFS via des requêtes non standardisées. Pour réactiver les requêtes standardisées, renouvelez les instructions ci-dessus, mais attribuez la valeur true à la propriété standardizedQueries.

Fonctions SQL prises en charge dans ArcGIS Server

La liste suivante présente les fonctions SQL prises en charge par ArcGIS Server, ainsi que leur syntaxe respective. Lorsque les fonctions et la syntaxe suivantes sont utilisées dans vos applications, ArcGIS Server les convertit pour qu’elles respectent la spécification de la base de données utilisée par le service.

Ces fonctions s’appliquent aux services web ArcGIS Server et non aux couches web hébergées.

Type de jonctionFonctionDescriptionExempleRemarques

Date

CURRENT_DATE

Renvoie la date actuelle dans le fuseau horaire de la session.

Datefield < CURRENT_DATE

Seule la syntaxe d'horodatage et de date suivante est prise en charge :

date 'yyyy-mm-dd', par exemple, Datefield = date '2012-05-29'

timestamp 'yyyy-mm-dd hh:mm:ss', par exemple, Datefield = timestamp '2012-05-29 15:14:25'

CURRENT_TIMESTAMP

Renvoie l'heure locale actuelle.

Timestampfield < CURRENT_TIMESTAMP

EXTRACT(extract_field FROM extract_source)

Renvoie une seule partie de la date/de l'heure, par exemple l'année, le mois, le jour, l'heure, la minute, etc.

L'argument extract_field peut correspondre à l'un des mots-clés suivants : ANNEE, MOIS, JOUR, HEURE, MINUTE ou SECONDE.

Recherche toutes les lignes à partir du mois de novembre :

EXTRACT(MONTH FROM Datefield) = 11

Mathématiques

ABS(numeric_exp)

Renvoie la valeur absolue (positive) de l'expression numérique spécifiée.

CEILING(numeric_exp)

Renvoie le plus petit entier supérieur ou égal à l’expression numérique spécifiée.

FLOOR(numeric_exp)

Renvoie le plus grand entier inférieur ou égal à l’expression numérique spécifiée.

LOG(float_exp)

Renvoie le logarithme naturel de l’expression flottante spécifiée.

LOG10(float_exp)

Renvoie le logarithme en base 10 de l’expression flottante spécifiée.

POWER(numeric_exp, integer_exp)

Renvoie la valeur de l’expression spécifiée à la puissance indiquée.

POWER(Numericfield, 2) = 16

ROUND(numeric_exp, integer_exp)

Renvoie une valeur numérique arrondie à la longueur ou précision spécifiée.

TRUNCATE(numeric_exp, integer_exp)

Renvoie une valeur numérique sans arrondir la valeur à une longueur ou précision spécifiée.

Chaîne

CHAR_LENGTH(string_exp)

Renvoie la longueur en caractères de la chaîne en entrée.

CONCAT(string_exp1, string_exp2)

Renvoie une chaîne qui est le résultat de la concaténation de deux valeurs de chaîne ou plus.

LOWER(string_exp)

Renvoie une expression de caractères après la conversion de données de caractères majuscules en minuscules.

SUBSTRING(string_exp FROM start FOR length)

Renvoie une partie d'une expression de caractères ou de texte.

Recherche toutes les lignes où les deux premiers caractères des valeurs dans Stringfield sont Ch :

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

UPPER(string_exp)

Renvoie une expression de caractères avec des données de caractères minuscules converties en majuscules.