Freigeben über


Wichtige Sicherheitsüberlegungen zu SQLXML

Gilt für:SQL ServerAzure SQL-Datenbank

Im Folgenden werden Sicherheitsrichtlinien zur Verwendung von SQLXML für den Datenzugriff erläutert.

  • Der SQLXMLOLEDB-Anbieter macht eine StreamFlags-Eigenschaft verfügbar, mit der Sie Flags festlegen können, die angeben, welche SQLXML-Funktionalität für jede bestimmte instance aktiviert oder deaktiviert werden soll. Anhand dieser Eigenschaft können Sie die Verwendung von SQLXML anpassen und sicherstellen, dass nur die gewünschten Komponenten aktiviert werden. Weitere Informationen finden Sie unter SQLXMLOLEDB-Anbieter (SQLXML 4.0).

  • Wenn SQLXML-Fehler auftreten und zurückgegeben werden, können sie Informationen über das Datenbankschema wie Tabellennamen, Spaltennamen und Typ umfassen. Bei der Behandlung dieser Fehler sollten Sie vorsichtig vorgehen, sodass Informationen zu Ihrer SQL Server Installation für Benutzer nicht leicht auffindbar sind, wenn sie nicht beabsichtigt oder benötigt werden.

  • Wenn SQLXML zum Abfragen oder Senden von Updates an SQL Server verwendet wird, legt keine Begrenzung für die Menge der Daten fest, die ausgetauscht werden können, und führt keine Überprüfung der Datengröße in einer SQLXML-Nutzlast durch, bevor versucht wird, sie zu verarbeiten. Wenn Sie Ihre Anwendung mit SQLXML entwickeln, liegt es in Ihrem Verantwortungsbereich sicherzustellen, dass genügend Systemspeicher zum Verarbeiten der Daten vorhanden ist. Beim Abfragen von Daten vom Server sollten Sie beispielsweise überprüfen, ob genügend Speicherplatz auf dem Client vorhanden ist, um die abgefragten Daten zu empfangen. Ebenso müssen Sie beim Laden von Daten auf den Server sicherstellen, dass genügend Speicherplatz auf dem Server zur Verarbeitung der Daten und genügend Festplattenspeicher auf dem Server zum Speichern der Daten zur Verfügung steht.

  • SQLXML generiert dynamisch Transact-SQL-Abfragen und Updatebefehle und sendet sie zur Ausführung an SQL Server. Dies ist die einzige Methode, bei der SQLXML den Server abfragt und aktualisiert. Ergebnisse werden entweder als Datenstrom (von XML) oder als Rowset empfangen.

  • Beim Empfang von Abfrageergebnissen führt SQLXML basierend auf dem Inhalt der empfangenen Daten keine Aktionen aus. Es erfolgt keine zusätzliche Verarbeitung auf Grundlage des Typs oder des Inhalts der Daten. Die Daten werden nie als Code behandelt, mit dem Aktionen ausgeführt werden.

  • Beim Ausführen von XML-Vorlagen übersetzt SQLXML die XPath- und DBObject-Abfragen, die in der übermittelten Vorlage enthalten sind, in Transact-SQL-Befehle, die dann für SQL Server ausgeführt werden. Diese Befehle beeinflussen nur vorhandene Daten. Von SQLXML generierte Befehle ändern nie die Struktur der Datenbank. Benutzer müssen explizite Befehle ausgeben, um die Datenbankstruktur zu ändern. Beispielsweise, indem sie in einen sql:query-Block einer Vorlage eingeschlossen werden.

  • Beim Ausführen von DBObject-Abfragen und XPath-Anweisungen über Zuordnungsdateien lässt SQLXML die Daten in der Datenbank unverändert.

  • SQLXML kann Formatierungsänderungen an den angegebenen Daten basierend auf den Unterschieden zwischen den XML- und SQL Server-Datenmodellen vornehmen. Zum Beispiel ist das Format für die Zeitangabe unterschiedlich. SQLXML versucht, diese Unterschiede aufzulösen. Als Folge können Genauigkeitsinformationen verloren gehen.

  • SQLXML legt keine Beschränkungen für die Dauer der Verarbeitung der Daten fest. Die Verarbeitung wird fortgesetzt, bis ein Fehler auftritt oder die Verarbeitung abgeschlossen ist.

  • SQLXML schreibt nicht ins Dateisystem. Wenn Benutzer Daten, die sie aus der Datenbank abrufen, speichern möchten, müssen sie dazu ihren Code verwenden.

  • SQLXML ermöglicht es Benutzern, eine beliebige SQL-Abfrage für die Datenbank auszuführen. Diese Funktion sollte nie einer unsicheren oder unkontrollierten Quelle verfügbar gemacht werden, da es im Grunde eine Öffnung der SQL-Datenbank ohne Bereitstellung für die Benutzer bedeutet.

  • Beim Ausführen von Updategrams übersetzt SQLXML die updg:sync-Blöcke in die Befehle DELETE, UPDATE und INSERT für den SQL Server instance. Diese Befehle beeinflussen nur vorhandene Daten. Von SQLXML generierte Befehle ändern nie die Datenbank. Benutzer müssen explizite Befehle ausgeben, um die Datenbankstruktur zu ändern. Beispielsweise, indem sie in einen sql:query-Block einer Vorlage eingeschlossen werden.

  • Beim Ausführen von DiffGrams übersetzt SQLXML die DiffGram-Befehle für den SQL Server instance in DELETE, UPDATE und INSERT. Diese Befehle beeinflussen nur vorhandene Daten. Von SQLXML generierte Befehle ändern nie die Datenbank. Benutzer müssen explizite Befehle ausgeben, um die Datenbankstruktur zu ändern. Beispielsweise, indem sie in einen sql:query-Block einer Vorlage eingeschlossen werden.

Weitere Informationen

Sicherheitsüberlegungen zu SQLXML 4.0