錯誤重現
無法開啟實體檔案 "D:\DB\OA.mdf"。作業系統錯誤 5 (拒絕存取)。 (Microsoft SQL Server, 錯誤: 5123)
核心原因
SQL Server 服務帳號 (預設 NT Service\MSSQLSERVER) 對資料庫檔案目錄缺乏 讀取/寫入權限。常見於:
- 檔案從其他電腦複製而來,保留原 ACL。
- 檔案放在非預設資料目錄 (如 D:\DB)。
- 服務帳號變更後未同步權限。
標準解決步驟
- 開啟檔案總管,定位
.mdf、.ldf 所在資料夾。
- 右鍵 → 內容 → 安全性 → 編輯。
- 點擊 新增,輸入物件名稱:
NT Service\MSSQLSERVER (具名執行個體為 NT Service\MSSQL$InstanceName),按 檢查名稱 解析。
- 授與 完全控制,確定套用至子資料夾與檔案。
- 在 SSMS 重新執行附加,應成功。
替代方案:變更服務帳號為具權限帳號
- 開啟 SQL Server 組態管理員 → SQL Server 服務。
- 右鍵目標執行個體 → 內容 → 登入。
- 選 這個帳號,輸入具備該資料夾權限的網域/本地帳號密碼。
- 重啟服務,再次附加。
快速驗證腳本
-- 檢查服務啟動帳號
SELECT servicename, service_account
FROM sys.dm_server_services
WHERE servicename LIKE 'SQL Server%';
若仍失敗,進階排查
- 防毒軟體即時掃描鎖定檔案 → 加入排除清單。
- 檔案屬性為「唯讀」 → 取消勾選。
- 磁碟空間不足 → 清理空間。
- 檔案已被其他 SQL 執行個體附加 → 先卸離。
- 啟用 以系統管理員身分執行 SSMS 測試 (僅驗證檔案本身無損壞)。
預防措施
- 建立資料庫時指定預設資料/記錄目錄 (已具備正確 ACL)。
- 部署腳本中包含
icacls 設定權限步驟。
- 定期稽核服務帳號權限與資料目錄 ACL 一致性。