共用方式為


ADO 安全性設計功能

下列各節說明 ActiveX Data Objects (ADO) 2.8 和更新版本中的安全性設計功能。 這些變更是在 ADO 2.8 中進行,以改善安全性。 Windows Vista 中 Windows DAC 6.0 隨附的 ADO 6.0,相當於 Windows XP 和 Windows Server 2003 中 MDAC 2.8 隨附的 ADO 2.8。 本主題提供如何在 ADO 2.8 或更新版本中保護應用程式的相關資訊。

重要

如果您要從舊版 ADO 更新應用程式,建議您先在非生產電腦上測試更新的應用程式,再將其部署給客戶。 如此一來,您就可以在部署更新的應用程式之前,先確定您知道任何相容性問題。

Internet Explorer 檔案存取案例

下列功能會影響 ADO 2.8 和更新版本在 Internet Explorer 的已編寫指令碼網頁中使用時的運作方式。

已修訂和改善的安全性警告訊息方塊現在用來警示使用者

針對 ADO 2.7 和更早版本,當已編寫指令碼網頁嘗試執行來自不受信任提供者的 ADO 程式碼時,會出現下列警告訊息:

This page accesses data on another domain. Do you want to allow this? To
avoid this message in Internet Explorer, you can add a secure Web site to
your Trusted Sites zone on the Security tab of the Internet Options dialog
box.

針對 ADO 2.8 和更新版本,上述訊息不再出現。 相反地,下列訊息會出現在此內容中:

This Website uses a data provider that may be unsafe. If you trust the
Website, click OK, otherwise click Cancel.

上述訊息可讓使用者做出明智的決策,同時了解任一選擇的結果:

  • 如果使用者信任網站,按一下 [確定] 會允許所有磁碟安全程式碼 (所有 ADO 方法和屬性,但本主題稍後所述的磁碟可存取 API 除外) 在瀏覽器視窗中執行。

  • 如果使用者不信任網站,按一下 [取消] 會封鎖 ADO 程式碼,讓資料存取無法完全執行。

磁碟可存取程式碼現在僅限於信任的網站

ADO 2.8 中已進行其他設計變更,特別限制一組有限 API 的能力,這可能會公開本機電腦上檔案讀取或寫入的可能性。 以下是在執行 Internet Explorer 時進一步限制安全性的 API 方法:

針對這些可能磁碟可存取函式的受限集合,如果在 Internet Explorer 中執行任何使用這些方法的程式碼,ADO 2.8 和更新版本會發生下列行為:

  • 如果先前提供程式碼的網站已新增至 [信任的網站] 區域清單,則程式碼會在瀏覽器中執行,並將存取權授與本機檔案。

  • 如果網站未出現在 [信任的網站] 區域清單中,程式碼會遭到封鎖,並拒絕對本機檔案的存取。

    注意

    在 ADO 2.8 和更新版本中,使用者不會收到警示,或建議將網站新增至 [信任的網站] 區域清單。 因此,管理 [信任的網站] 清單是部署或支援需要存取本機檔案系統的網站型應用程式之人員的責任。

封鎖 Recordset 物件上 ActiveCommand 屬性的存取

在 Internet Explorer 中執行時,ADO 2.8 現在會封鎖對使用中 Recordset 物件的 ActiveCommand 屬性的存取,並傳回錯誤。 不論頁面是否來自在 [信任的網站] 清單中註冊的網站,都會發生此錯誤。

處理 OLE DB 提供者和整合式安全性的變更

在檢閱 ADO 2.7 和舊版中是否有潛在的安全性問題和疑慮時,發現下列案例:

在某些情況下,支援整合式安全性 DBPROP_AUTH_INTEGRATED 屬性的 OLE DB 提供者可能會允許已編寫指令碼網頁重複使用 ADO Connection 物件,使用使用者目前的登入認證,意外地連線到其他伺服器。 為了避免這種情況,ADO 2.8 和更新版本會根據 OLE DB 提供者為了整合式安全性選擇要提供或不提供的方式,來進行處理。

針對從 [信任的網站] 區域清單中所列網站載入的網頁,下表提供 ADO 2.8 和更新版本在每個案例中如何管理 ADO 連線的明細。

使用者驗證、登入的 IE 設定 提供者支援「整合式安全性」且會指定 UID 和 PWD (SQLOLEDB) 提供者不支援「整合式安全性」(JOLT、MSDASQL、MSPersist) 提供者支援「整合式安全性」,而且設定為 SSPI (未指定任何 UID/PWD)
使用目前的使用者名稱和密碼自動登入 允許連線 允許連線 允許連線
提示使用者輸入使用者名稱和密碼 允許連線 連線失敗 連線失敗
只在內部網路區域自動登入 允許連線 以安全性警告提示使用者 以安全性警告提示使用者
匿名登入 允許連線 連線失敗 連線失敗

當安全性警告出現時,訊息方塊會通知使用者:

This Website is using your identity to access a data source. If you trust this Website, click OK, otherwise click Cancel.

上述訊息可讓使用者做出更明智的決策,並據以繼續。

注意

對於不受信任的網站 (也就是未列在 [信任的網站] 區域清單中的網站),如果提供者也是不受信任 (如本節稍早所述),使用者可能會連續看到兩個安全性警告,一個是關於不安全提供者的警告,第二個是關於嘗試使用其身分識別的警告。 如果使用者對第一個警告按一下 [確定],則會執行上表中所述的 Internet Explorer 設定和回應行為程式碼。

控制 ADO 連接字串中是否傳回密碼文字

當您嘗試在 ADO Connection 物件上取得 ConnectionString 屬性的值時,會發生下列事件:

  1. 如果連線已開啟,則會對基礎 OLE DB 提供者進行初始化呼叫,以取得連接字串。

  2. 根據 DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO 屬性之 OLE DB 提供者中的設定,密碼會與其他傳回的連接字串資訊包含在一起。

例如,如果 ADO Connection 動態屬性 Persist Security Info 設定為 True,則會在傳回的連接字串中包含密碼資訊。 否則,如果基礎提供者已將屬性設定為 False (例如 SQLOLEDB 提供者),則會在傳回的連接字串中省略密碼資訊。

如果您使用第三方 (也就是非 Microsoft) OLE DB 提供者搭配 ADO 應用程式程式碼,您可以檢查如何實作 DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO 屬性,以判斷是否允許 ADO 連接字串包含密碼資訊。

載入和儲存記錄集或資料流時檢查非檔案裝置

針對 ADO 2.7 和更早版本,例如 OpenSave 之類用來讀取和寫入檔案型資料的檔案輸入/輸出作業,在某些情況下可能會允許使用指定非磁碟型檔案類型的 URL 或檔案名稱。 例如,LPT1、COM2、PRN.TXT、AUX 可作為系統上印表機與輔助裝置之間輸入/輸出的別名

針對 ADO 2.8 和更新版本,此功能已更新。 為了開啟及儲存 RecordsetStream 物件,ADO 現在會執行檔案類型檢查,以確保 URL 或檔案名稱中指定的輸入或輸出裝置是實際的檔案。

注意

本節所述的檔案類型檢查僅適用於 Windows 2000 和更新版本。 不適用於在舊版 Windows (例如 Windows 98) 執行 ADO 2.8 或更新版本的情形。