Skip To Content

Erzwingen standardisierter SQL-Abfragen

ArcGIS Server bietet eine Sicherheitsoption, die Entwickler dazu zwingt, bei der Arbeit mit Karten-, Feature-, Image- und WFS-Services über REST oder SOAP standardisierte SQL-Abfragen zu verwenden. Dadurch können Entwickler und Anwendungen ArcGIS Server-Services leichter abfragen, und Angriffe durch Einschleusung von SQL-Befehlen werden verhindert. Standardisierte Abfragen werden standardmäßig erzwungen, diese Option kann jedoch vom Serveradministrator deaktiviert werden.

Standardisierte Abfragen

Wenn standardisierte Abfragen aktiviert sind, prüft ArcGIS Server auf Standardsyntax und erlaubt keine datenbankspezifischen Funktionen und Syntaxstrukturen. Wenn Sie als Anwendungsentwickler aktuell datenbankspezifische Funktionen und Syntax verwenden, müssen Sie die WHERE-Klauseln im Anwendungscode aktualisieren, sodass allgemeine SQL-Syntax verwendet wird, welche von ArcGIS unterstützt wird. Alternativ können Sie die Prüfung auf standardisierte Abfragen in ArcGIS Server deaktivieren.

Einschränkungen bei standardisierten Abfragen

Standardisierte Abfragen werden auf die gesamte ArcGIS Server-Site angewendet. Es ist nicht möglich, sie nur für einige Services zu deaktivieren.

Standardisierte Abfragen werden nicht für Verbindungen zwischen unterschiedlichen Workspaces unterstützt. Datenbanktabellen, auf die über eine OLE-DB-Verbindungsdatei zugegriffen wird, werden ebenfalls nicht unterstützt. Wenn die Service-Daten diese Quellen enthalten, müssen Sie alternative Methoden zum Referenzieren der Daten verwenden.

Unterabfragen in Form von WHERE-Klauseln, beispielsweise POP_2010 = (SELECT min(POP_2010)) FROM counties, werden nicht unterstützt.

Erstellen einer standardisierten Abfrage

In der Tabelle am Ende dieses Themas ist beschrieben, welche SQL-Funktionen in ArcGIS Server unterstützt werden. Anhand diese Tabelle wird vermittelt, welche SQL-Funktionen zum Erstellen standardisierter Abfragen herangezogen werden können, die für Karten-, Feature-, Image- und WFS-Services in Ihren Anwendungen verwendet werden können.

Feststellen, ob standardisierte Abfragen in ArcGIS Server verwendet werden

Wie oben erwähnt, sind standardisierte Abfragen standardmäßig aktiviert und gelten für alle Karten-, Feature-, Image- und WFS-Services auf der ArcGIS Server-Site. Serveradministratoren können jedoch überprüfen, ob standardisierte Abfragen verwendet werden, indem sie sich beim ArcGIS Server-Administratorverzeichnis anmelden und zu System > Eigenschaften > Update navigieren. Wenn im Dialogfeld Systemeigenschaften keine Systemeigenschaft angezeigt wird oder {"standardizedQueries": "true"} vorhanden ist, sind die standardisierten Abfragen aktiviert.

Alternativ können Administratoren, Anwendungsentwickler und Clients überprüfen, ob standardisierte Abfragen verwendet werden, indem sie einen Service über das Services-Verzeichnis von ArcGIS Server aufrufen und die Eigenschaft Standardisierte Abfragen verwenden überprüfen. Für Karten-, Feature- und WFS-Services kann die Eigenschaft überprüft werden, indem auf einen Layer oder eine Tabelle in dem Service zugegriffen wird, z. B. https://gisserver.domain.com:6443/arcgis/rest/services/folder/service/service type/0. Für Image-Services ist die Eigenschaft am Service-Endpunkt verfügbar, z. B. https://gisserver.domain.com:6443/arcgis/rest/services/folder/service/ImageServer.

Weitere Anweisungen zum Zugriff auf das Administratorverzeichnis oder zur Deaktivierung von standardisierten Abfragen finden Sie im nächsten Abschnitt dieses Themas.

Deaktivieren von standardisierten Abfragen

Wenn in Ihrer Anwendung datenbankspezifische WHERE-Klausel-Anweisungen verwendet werden müssen, können Sie die standardisierten Abfragen über das ArcGIS Server-Administratorverzeichnis deaktivieren. Führen Sie dazu folgende Anweisungen aus.

Vorsicht:

Die Deaktivierung dieser Sicherheitsoption kann zur Einschleusung von SQL-Befehlen führen.

Hinweis:

Das Deaktivieren standardisierter Abfragen wird für gehostete Feature-Services in ArcGIS Enterprise nicht unterstützt.

  1. Öffnen Sie das Administratorverzeichnis, und melden Sie sich bei der Site als Benutzer mit Administratorberechtigungen an.

    Das Administratorverzeichnis ist in der Regel unter https://gisserver.domain.com:6443/arcgis/admin verfügbar.

  2. Klicken Sie auf System > Eigenschaften > Aktualisierung.
  3. Geben Sie auf der Seite Vorgang – Update die folgende Zeichenfolge in das Dialogfeld Systemeigenschaften ein:

    {"standardizedQueries": "false"}

  4. Klicken Sie auf Aktualisieren.
  5. Starten Sie ArcGIS Server erneut.

Die Site ist nun so konfiguriert, dass Benutzer unter Verwendung von nichtstandardisierten Abfragen Anforderungen an Karten-, Feature-, Image- und WFS-Services senden können. Wenn Sie standardisierte Abfragen erneut aktivieren möchten, wiederholen Sie die Anweisungen oben, und legen Sie die Eigenschaft standardizedQueries auf true fest.

Unterstützte SQL-Funktionen in ArcGIS Server

Aus der folgenden Liste geht hervor, welche SQL-Funktionen von ArcGIS Server unterstützt werden und wie die jeweilige Syntax lautet. Wenn die folgenden Funktionen und die Syntax in Ihren Anwendungen verwendet werden, konvertiert ArcGIS Server sie entsprechend den Spezifikationen der Datenbank, die von dem Service verwendet wird.

Diese Funktionen gelten für ArcGIS Server-Web-Services, nicht für gehostete Web-Layer.

FunktionstypFunktionBeschreibungBeispiel

Datum

CURRENT_DATE

Gibt das aktuelle Datum in der Sitzungszeitzone zurück.

Hinweis:

Die Zeitzone der gehosteten Sitzung ist immer UTC.

Datefield < CURRENT_DATE

CURRENT_TIME

Gibt die aktuelle Uhrzeit in der Sitzungszeitzone zurück.

Hinweis:

Die Zeitzone der gehosteten Sitzung ist immer UTC.

Timestampfield < CURRENT_TIME

CURRENT_TIMESTAMP

Gibt die aktuelle lokale Uhrzeit zurück.

Hinweis:

Die Zeitzone der gehosteten Sitzung ist immer UTC.

Timestampfield < CURRENT_TIMESTAMP

EXTRACT(extract_fieldFROM extract_source)

Hiermit wird der extract_field-Teil von extract_source zurückgegeben.

Beim Argument extract_field kann es sich um eines der folgenden Schlüsselwörter handeln: YEAR, MONTH, DAY, HOUR, MINUTE oder SECOND.

Sucht alle Zeilen des Monats November:

EXTRACT(MONTH FROM Datefield) = 11

Mathematik

ABS(numeric_exp)

Gibt den absoluten (positiven) Wert des angegebenen numerischen Ausdrucks zurück.

ABS(-99)=90

ACOS(numeric_exp)

Gibt den Arkuskosinus von numeric_exp als Winkel, ausgedrückt in Radianten, zurück.

ASIN(numeric_exp)

Gibt den Arkussinus von numeric_exp als Winkel, ausgedrückt in Radianten, zurück.

ATAN(numeric_exp)

Gibt den Arkustangens von numeric_exp als Winkel, ausgedrückt in Radianten, zurück.

CEILING(numeric_exp)

Gibt die kleinste Ganzzahl zurück, die größer als oder gleich dem angegebenen numerischen Ausdruck ist.

Findet alle Zeilen, in denen die Aufrundungsganzzahl von numeric_exp einem gewünschten Wert entspricht:

CEILING(ratings)=90

COS(numeric_exp)

Gibt den Kosinus von numeric_exp als Winkel, ausgedrückt in Radianten, zurück.

COSH(numeric_exp)

Gibt den Kosinus Hyperbolicus von numeric_exp als Winkel, ausgedrückt in Radianten, zurück.

FLOOR(numeric_exp)

Gibt die größte Ganzzahl zurück, die kleiner oder gleich dem angegebenen numerischen Ausdruck ist.

Findet alle Zeilen, in denen die Abrundungsganzzahl von numeric_exp einem gewünschten Wert entspricht:

FLOOR(ratings)=75

LOG(float_exp)

Gibt den natürlichen Logarithmus des angegebenen Float-Ausdrucks zurück.

LOG10(float_exp)

Gibt den Logarithmus der Basis 10 des angegebenen float-Ausdrucks zurück.

MOD(integer_exp1, integer_exp2)

Gibt den Rest von integer_exp1 dividiert durch integer_exp2 zurück.

Findet alle Zeilen, in denen "integer_exp1" eine gerade Zahl ist:

MOD(userid,2)=0

POWER(numeric_exp, integer_exp)

Gibt den Wert des angegebenen Ausdrucks mit der angegebenen Potenz zurück.

POWER(Numericfield, 2) = 16

ROUND(numeric_exp, integer_exp)

Gibt einen numerischen Wert zurück, der auf die angegebene Länge oder Genauigkeit gerundet ist.

SIGN(numeric_exp)

Gibt einen Indikator des mathematischen Vorzeichens von numeric_exp zurück.

Beispiele: 0 für Null, 1 für positiv, -1 für negativ.

Sucht alle Zeilen, in denen numeric_exp eine negative Zahl ist:

SIGN(elevation)=-1

SIN(numeric_exp)

Gibt den Sinus von numeric_exp als Winkel, ausgedrückt in Radianten, zurück.

SINH(numeric_exp)

Gibt den Sinus Hyperbolicus von numeric_exp als Winkel, ausgedrückt in Radianten, zurück.

TAN(numeric_exp)

Gibt den Tangens von numeric_exp als Winkel, ausgedrückt in Radianten, zurück.

TANH(numeric_exp)

Gibt den Tangens Hyperbolicus von numeric_exp als Winkel, ausgedrückt in Radianten, zurück.

TRUNCATE(numeric_exp, integer_exp)

Gibt numeric_exp auf integer_exp Stellen rechts neben dem Dezimaltrennzeichen abgeschnitten ohne Rundung zurück.

TRUNCATE(0.5463111445,3)=0.546

Aggregieren

AVG(numeric_exp, integer_exp)

Gibt den berechneten Durchschnitt der Werte in numeric_exp zurück.

outStatistics=[{"statisticType": "avg","onStatisticField": "pop1997","outStatisticFieldName": "avg_pop1997"}]

COUNT(string_exp OR ASTERISK)

Gibt die Anzahl der Zeilen zurück, die einen string_exp enthalten.

outStatistics=[{"statisticType": "count","onStatisticField": "p_females","outStatisticFieldName": "count_p_females"}]

MAX(numeric_exp)

MAX(string_exp)

MAX(datetime_exp)

Gibt den größten Wert von numeric_exp, string_exp oder datetime_exp zurück.

Sucht den Maximalwert aller numeric_exp-Zeilen:

outStatistics=[{"statisticType": "max","onStatisticField": "p_males","outStatisticFieldName": "max_p_males"}]

MIN(numeric_exp)

MIN(numeric_exp)

MIN(numeric_exp)

Gibt den kleinesten Wert von numeric_exp, string_exp oder datetime_exp zurück.

Sucht den Minimalwert aller numeric_exp-Zeilen:

outStatistics=[{"statisticType": "min","onStatisticField": "pop1990","outStatisticFieldName": "min_pop1990"}]

STDDEV(numeric_exp)

Gibt die Standardabweichung der Werte in numeric_exp zurück.

Suche den Standardabweichungswert aller numeric_exp-Zeilen:

outStatistics=[{"statisticType": "stddev","onStatisticField": "eval_score","outStatisticFieldName": "stddev_eval_score"}]

SUM(numeric_exp)

Gibt die Summe der Werte in numeric_exp zurück.

Suche nach der Summe der Werte aller numeric_exp-Zeilen:

outStatistics=[{"statisticType": "sum","onStatisticField": "p_females","outStatisticFieldName": "sum_p_females"}]

VAR(numeric_exp)

Gibt die Varianz der Werte in numeric_exp zurück.

Sucht den Varianzwert aller numeric_exp-Zeilen:

outStatistics=[{"statisticType": "var","onStatisticField": "pop1980","outStatisticFieldName": "var_pop1980"}]

Zeichenfolge

CHAR_LENGTH(string_exp)

Gibt die Länge der Eingabezeichenfolge in Zeichen zurück.

Suche nach allen Zeilen, in denen die Länge von string_exp größer als 10 ist:

CHAR_LENGTH(string_exp) > 10

CONCAT(string_exp1, string_exp2)

Gibt eine Zeichenfolge zurück, die das Ergebnis der Verkettung von mindestens zwei Zeichenfolgenwerten ist.

Gibt eine verbundene Version von string_exp1 und string_exp2 mit einem Verbindungszeichen aus:

OutFields=CONCAT(id,CONCAT(I-,name))

LOWER(string_exp)

Gibt eine Zeichenfolge zurück, die string_exp entspricht, wobei alle Großbuchstaben in Kleinbuchstaben umgewandelt werden. Das Standardgebietsschema ist das Gebietsschema der Datenbank.

Sucht nach allen Zeilen, in denen der Wert die gewünschte Zeichenfolge enthält, unabhängig von Groß- und Kleinschreibung:

LOWER(string_field) = "lowered_string"

POSITION(cahracter_exp1 IN character_exp2)

Gibt die Position des ersten character_exp1 in character_exp2 als Ganzzahl zurück.

Suche nach allen Zeilen, deren erstes Zeichen "I" ist:

POSITION('I' IN state_name) = 1

SUBSTRING(string_exp FROM start FOR length)

SUBSTRING(string_exp, integer_exp_start, integer_exp_length)

Gibt eine aus string_exp abgeleitete Zeichenfolge zurück. Diese Zeichenfolge beginnt an der durch "start" festgelegten Zeichenposition und weist eine Länge von "length" Zeichen auf.

Suche nach allen Zeilen, bei denen die ersten beiden Zeichen aus Werten in Stringfield "Ch" lauten:

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

TRIM(BOTH|LEADING|TRAILING trim_character FROM string_exp)

Gibt string_exp zurück, wobei trim_character von den führenden, nachstehenden oder beiden Enden des Strings entfernt wurde.

Ausgabe von string_field ohne das unerwünschte Präfix und Suffix:

OutFields=TRIM(BOTH '__' FROM string_exp)

UPPER(string_exp)

Gibt eine Zeichenfolge zurück, die mit string_exp identisch ist und in der alle Kleinbuchstaben in Großbuchstaben umgewandelt wurden. Das Standardgebietsschema ist das Gebietsschema der Datenbank.

UPPER(name) = "TEXAS"

Sonstige

CAST(expression AS target_data_type)

Gibt einen in target_data_type umgewandelten Ausdruck zurück.

Sucht nach allen Zeilen, in denen der in einen bestimmten Datentyp umgewandelte Ausdruck dem gewünschten Wert entspricht:

CAST(parcel_id AS INT)=38456

COALESCE(expression1,expression2,...)

Gibt den ersten Nicht-NULL-Wert aus einer Liste von Ausdrücken zurück.

Sucht nach allen Zeilen, in denen der erste Nicht-NULL-Wert dem angegebenen Wert entspricht:

COALESCE(preferred_name, nickname, first_name) = 'MyName'

CURRENT_USER

Gibt den aktuell angemeldeten Benutzer zurück.

Hinweis:

Es wird nicht der aktuelle Datenbankbenutzer zurückgegeben.

Sucht nach allen Zeilen, in denen der aktuell angemeldete Benutzer der einzige Außendienstmitarbeiter ist.

workerfield=CURRENT_USER

Sucht nach allen Zeilen, in denen der aktuell angemeldete Benutzer als Außendienstmitarbeiter aufgeführt ist, unabhängig davon, ob es noch andere Außendienstmitarbeiter gibt.

position(CURRENT_USER in workerfield) > 0

NULLIF(expression1,expression2)

Vergleicht zwei Ausdrücke. Wenn sie gleich sind, wird NULL zurückgegeben. Wenn sie nicht gleich sind, wird "expression1" zurückgegeben.

Gibt das Ergebnis der NULLIF-Vergleiche zwischen expression1 und expression2 zurück:

outFields=NULLIF(units_sold, unit_sell_goal)