共用方式為


SQLXML 的核心安全性考量

適用於:SQL ServerAzure SQL 資料庫

以下是使用 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 區塊中。

另請參閱

SQLXML 4.0 安全性考慮