SQLXML 的核心安全性考量
以下是使用 SQLXML 進行數據存取的安全性指導方針。
SQLXMLOLEDB 提供者會 公開 StreamFlags 屬性,可讓您設定旗標,指出每個特定實例應該啟用或停用哪些 SQLXML 功能。 您可以使用這個屬性來自定義 SQLXML 的使用,並確定只啟用您想要的元件。 如需詳細資訊,請參閱 SQLXMLOLEDB 提供者(SQLXML 4.0)。
當發生 SQLXML 錯誤並傳回時,它們可以包含資料庫架構的相關信息,例如數據表名稱、數據行名稱或類型資訊。 您應該在處理這些錯誤時小心,如此一來,SQL Server 安裝的相關信息就不容易被使用者探索到,因為該錯誤並非預期或需要。
當用來查詢或傳送更新至 SQL Server 時,SQLXML 不會對可交換的數據量設定任何限制,也不會在嘗試處理 SQLXML 承載之前,對 SQLXML 承載中的數據大小進行任何檢查。 當您使用 SQLXML 開發應用程式時,您必須負責確保系統上有足夠的記憶體來處理數據。 例如,從伺服器查詢數據時,您應該確認用戶端記憶體中有足夠的空間可接收它。 同樣地,如果您要將資料載入伺服器,您必須確認伺服器上有足夠的可用記憶體來處理它,以及伺服器上有足夠的可用磁碟空間來儲存數據。
SQLXML 會動態產生 Transact-SQL 查詢和更新命令,並將其傳送至 SQL Server 以供執行。 這是 SQLXML 查詢和更新伺服器的唯一方式。 結果會以數據流或數據列集的形式接收。
接收查詢結果時,SQLXML 不會根據它接收的數據內容採取任何動作。 不會根據數據的類型或內容進行其他處理。 數據永遠不會被視為執行動作的程序代碼。
執行 XML 範本時,SQLXML 會將提交的範本中包含的 XPath 和 DBObject 查詢轉譯成 Transact-SQL 命令,然後針對 SQL Server 執行。 這些命令只會影響現有的數據。 SQLXML 所產生的命令永遠不會改變資料庫的結構。 用戶必須發出明確的命令來改變資料庫結構。 例如,將它們包含在 範本的 sql:query 區塊中。
在對應檔案上執行 DBObject 查詢和 XPath 語句時,SQLXML 不會以任何方式改變資料庫中的數據。
SQLXML 可能會根據 XML 與 SQL Server 數據模型之間的差異,對指定的數據進行格式化變更。 例如,指定時間的格式不同。 SQLXML 會嘗試解決這些差異。 因此,某些精確度資訊可能會遺失。
SQLXML 不會限制處理資料所需的時間量。 處理會繼續,直到發生錯誤或處理完成為止。
SQLXML 不會寫入檔案系統。 如果使用者想要儲存他們從資料庫擷取的數據,則必須在程式代碼中執行此動作。
SQLXML 可讓使用者對資料庫執行他們喜歡的任何 SQL 查詢。 這項功能絕不應公開至不安全或未受控制的來源,因為這基本上是開啟 SQL 資料庫,而不需布建給任何使用者。
執行 Updategram 時,SQLXML 會將 updg:sync 區塊轉譯成針對 SQL Server 實例的 DELETE、UPDATE 和 INSERT 命令。 這些命令只會影響現有的數據。 SQLXML 所產生的命令永遠不會改變資料庫。 用戶必須發出明確的命令來改變資料庫結構。 例如,將它們包含在 範本的 sql:query 區塊中。
執行 DiffGrams 時,SQLXML 會將 DiffGram 轉譯成針對 SQL Server 實例的 DELETE、UPDATE 和 INSERT 命令。 這些命令只會影響現有的數據。 SQLXML 所產生的命令永遠不會改變資料庫。 用戶必須發出明確的命令來改變資料庫結構。 例如,將它們包含在 範本的 sql:query 區塊中。