Considerazioni principali sulla sicurezza di SQLXML 4.0
Si applica a: SQL Server
Database SQL di Azure
Di seguito sono riportate alcune linee guida relative alla sicurezza quando si utilizza SQLXML per l'accesso ai dati.
Il provider SQLXMLOLEDB espone una proprietà StreamFlags che consente di impostare flag che indicano quali funzionalità SQLXML devono essere abilitate o disabilitate per ogni istanza specifica. È possibile utilizzare questa proprietà per personalizzare l'utilizzo di SQLXML e assicurarsi che siano abilitati solo i componenti desiderati. Per altre informazioni, vedere Provider SQLXMLOLEDB (SQLXML 4.0).
Gli eventuali errori SQLXML restituiti possono includere informazioni sullo schema del database, come i nomi delle tabelle o delle colonne oppure informazioni sui tipi. È consigliabile prestare attenzione quando si gestiscono questi errori in modo che le informazioni sull'installazione di SQL Server non siano facilmente individuabili dagli utenti in cui non sono previsti o necessari.
Se usato per eseguire query o inviare aggiornamenti a SQL Server, SQLXML non imposta alcun limite sulla quantità di dati che è possibile scambiare e non controlla le dimensioni dei dati in un payload SQLXML prima di tentare di elaborarlo. Quando si sviluppa l'applicazione utilizzando SQLXML, è necessario assicurarsi che sia presente una quantità di memoria sufficiente nel sistema per elaborare i dati. Quando ad esempio si eseguono query sui dati del server, è necessario verificare la presenza di spazio sufficiente nella memoria del client per riceverli. Analogamente, se si caricano dati nel server, è necessario verificare la disponibilità di memoria sufficiente nel server per elaborarli e di spazio di archiviazione su disco sufficiente nel server per archiviarli.
SQLXML genera dinamicamente query Transact-SQL e comandi di aggiornamento e li invia a SQL Server per l'esecuzione. Si tratta dell'unico sistema disponibile in SQLXML per eseguire query nel server e per aggiornare quest'ultimo. I risultati verranno ricevuti come flusso (di XML) o come set di righe.
Alla ricezione dei risultati delle query, non vengono eseguite azioni in base al contenuto dei dati ricevuti. Non vengono eseguite ulteriori operazioni di elaborazione in base al tipo o al contenuto dei dati. I dati non vengono mai trattati come codice con il quale eseguire azioni.
Quando si eseguono modelli XML, SQLXML converte le query XPath e DBObject contenute nel modello inviato in comandi Transact-SQL che vengono quindi eseguiti su SQL Server. Tali comandi influiscono solo sui dati esistenti. I comandi generati da SQLXML non modificheranno mai la struttura del database. Gli utenti devono inviare comandi espliciti per modificare la struttura del database, Ad esempio, includendoli in un blocco sql:query di un modello.
Quando si eseguono query DBObject e istruzioni XPath su file di mapping, SQLXML non prevede la modifica dei dati del database.
SQLXML può apportare modifiche di formattazione ai dati specificati in base alle differenze tra i modelli di dati XML e SQL Server. Il formato per la specifica dell'ora è ad esempio diverso. Poiché in SQLXML viene tentata la risoluzione di queste differenze, si potrebbero perdere alcune informazioni sulla precisione.
SQLXML non prevede l'impostazione di alcun limite sulla quantità di tempo necessaria per l'elaborazione dei dati. L'elaborazione continuerà finché non sarà stata completata o non si verificherà un errore.
SQLXML non prevede la scrittura nel file system. L'eventuale salvataggio dei dati recuperati dal database deve essere eseguito nel codice.
SQLXML consente agli utenti di eseguire qualsiasi query SQL sul database. Questa funzionalità non deve essere mai esposta a un'origine non protetta o non controllata, che equivarrebbe a consentire l'accesso al database SQL a qualsiasi utente.
Quando si eseguono Updategram, SQLXML converte i blocchi updg:sync in comandi DELETE, UPDATE e INSERT nell'istanza di SQL Server. Tali comandi influiscono solo sui dati esistenti. I comandi generati da SQLXML non modificheranno mai il database. Gli utenti devono inviare comandi espliciti per modificare la struttura del database, Ad esempio, includendoli in un blocco sql:query di un modello.
Quando si eseguono DiffGram, SQLXML converte i diffGram in comandi DELETE, UPDATE e INSERT nell'istanza di SQL Server. Tali comandi influiscono solo sui dati esistenti. I comandi generati da SQLXML non modificheranno mai il database. Gli utenti devono inviare comandi espliciti per modificare la struttura del database, Ad esempio, includendoli in un blocco sql:query di un modello.