錯誤現象
執行寫入 Access 資料庫操作時拋出:
Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80004005'
[Microsoft][ODBC Microsoft Access Driver] 無法更新。資料庫或物件為唯讀。
根本原因
Access 寫入時需在同目錄建立 .ldb 鎖定檔。若 IIS 匿名使用者帳號 (IUSR_電腦名) 對資料庫所在目錄缺乏「寫入」權限,即無法建立鎖定檔,導致錯誤。
常見誤區與錯誤做法
- 只移除資料庫檔案「唯讀」屬性 → 上傳後伺服器仍可能因繼承權限導致不可寫。
- 從唯讀目錄 (如光碟、壓縮包) 直接移動到可寫目錄 → 權限未正確重置。
- 給 Everyone 完全控制 → 極度危險,開放所有使用者存取。
正確解決步驟 (以 IIS 6.0 為例)
- 找到資料庫所在目錄 (或其上層可繼承權限的目錄)。
- 右鍵 → 「內容」→ 「安全性」頁籤 → 「編輯」→ 「新增」。
- 點選「進階」→ 「立即尋找」→ 找到 IUSR_電腦名 (格式固定)。
- 選中該帳號 → 確定返回權限設定視窗。
- 在權限列表中,除預設「讀取與執行」、「列出資料夾內容」、「讀取」外,勾選「寫入」。
- 點選「套用」→ 「確定」完成。
虛擬主機環境補充
若為虛擬主機,匿名使用者帳號可能非預設 IUSR_電腦名,請洽詢主機商確認正確帳號名稱再授權。
驗證方式
重新執行寫入頁面,若不再報錯即設定成功。建議同步檢查 .ldb 檔案能否正常建立/刪除。