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 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, sucht ArcGIS Server nach der Standardsyntax und erlaubt keine datenbankspezifische(n) Funktionen und Syntax. Wenn Sie als Anwendungsentwickler noch datenbankspezifische Funktionen und Syntax verwenden, müssen Sie die WHERE-Klauseln im Code der Anwendung aktualisieren, um eine bekannte, von ArcGIS unterstützte Syntax verwenden zu können. Alternativ können Sie die Suche nach standardisierten 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 wie eine WHERE-Klausel, beispielsweise POP_2010 = (SELECT min(POP_2010) FROM counties, werden nicht unterstützt.

Wie schreibe ich eine standardisierte Abfrage?

Die Tabelle am Ende dieses Themas beschreibt, 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.

Woran erkenne ich, 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 ein Service über das Services-Verzeichnis von ArcGIS Server aufgerufen und die Eigenschaft Standardisierte Abfragen verwenden überprüft wird. Für Karten-, Feature- und WFS-Services kann die Eigenschaft überprüft werden, indem auf einen bestimmten Layer oder eine bestimmte 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 als Benutzer mit Administrator-Berechtigungen bei der Site an. Das Administratorverzeichnis ist in der Regel unter https://gisserver.domain.com:6443/arcgis/admin verfügbar.
  2. Klicken Sie auf System > Eigenschaften > Aktualisieren.
  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 setzen Sie die standardizedQueries-Eigenschaft auf wahr.

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.

FunktionstypFunktionBeschreibungBeispielHinweise

Datum

CURRENT_DATE

Gibt das aktuelle Datum in der Sitzungszeitzone zurück.

Datefield < CURRENT_DATE

Es wird nur die folgende Datums- und Zeitstempelsyntax unterstützt:

Datum ' JJJJ-MM-TT', beispielsweise Datefield = date '2012-05-29'

Zeitstempel 'JJJJ-MM-TT hh:mm.ss', beispielsweise, Datefield = timestamp '2012-05-29 15:14:25'

CURRENT_TIMESTAMP

Gibt die aktuelle lokale Uhrzeit zurück.

Timestampfield < CURRENT_TIMESTAMP

EXTRACT(extract_field FROM extract_source)

Gibt einen Teil des/der Datum/Zeit wie Jahr, Monat, Tag, Stunde, Minute usw. zurück.

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.

CEILING(numeric_exp)

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

FLOOR(numeric_exp)

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

LOG(float_exp)

Gibt den natürlichen Algorithmus des angegebenen float-Ausdrucks zurück.

LOG10(float_exp)

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

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.

TRUNCATE(numeric_exp, integer_exp)

Gibt einen numerischen Wert an, ohne den Wert auf eine angegebene Länge oder Genauigkeit zu runden.

Zeichenfolge

CHAR_LENGTH(string_exp)

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

CONCAT(string_exp1, string_exp2)

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

LOWER(string_exp)

Gibt einen Zeichenausdruck zurück, nachdem großgeschriebene Zeichendaten in kleingeschriebene konvertiert wurden.

SUBSTRING(string_exp FROM start FOR length)

Gibt einen Teil eines Zeichen- oder Textausdrucks zurück.

Sucht alle Zeilen, bei denen die ersten beiden Zeichen aus Werten in Stringfield "Ch" lauten:

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

UPPER(string_exp)

Gibt einen Zeichenausdruck mit Daten zurück, deren Kleinbuchstaben in Großbuchstaben konvertiert wurden.