JDBC 必須遵循 Java 安全規範,針對未驗證的 Applet 嚴格限制資料庫存取權限,防止惡意程式碼竊取或破壞資料。
DriverManager 註冊的驅動,僅能存取其來源對應的資料源資料庫伺服器通常透過 IP 限制存取,此限制與一般 Applet 沙箱一致,無需放寬。
本地 Java 應用 (Trusted Code) 從 classpath 載入驅動,擁有完整檔案/網路存取權,同一般桌面程式。
若未驗證的 sun.sql.Driver 從遠端載入,則受限於同源原則,只能與同源程式碼配合運作。
驅動一旦安裝於本地端,即成為受信任程式碼一部分,必須防禦惡意 Applet 濫用。所有檢查發生在 連線建立瞬間,連線成功後不再重複檢查。
若驅動在多連線間共享單一 TCP 連線,必須自行檢查每個呼叫者權限:
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkConnect(hostName, portNumber); // 拋出 SecurityException 表示拒絕
}
例:Applet A 開啟連至 foobah 的 TCP,不代表 Applet B 可共用此連線。
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(fileName); // 檢查讀取權限
// security.checkWrite(fileName); // 檢查寫入權限
}
使用本地方法 (Native) 橋接時,難以追蹤底層將存取哪些檔案。驅動必須採「預設拒絕」策略:
security.checkWrite("foobaz") 判斷呼叫者是否為可信應用 (可寫任意檔 = Trusted),否則視為 Applet 予以封鎖此機制確保即使驅動被安裝在本地,惡意 Applet 也無法繞過沙箱直接存取資料庫。