錯誤訊息
無法為此要求擷取資料。(Microsoft.SqlServer.SmoEnum)
執行 Transact-SQL 陳述式或批次時發生例外狀況。(Microsoft.SqlServer.ConnectionInfo)
嘗試開啟或建立實體檔案 "d:\Data\***.mdf" 時,Create file 遇到作業系統錯誤 5 (拒絕存取。)
問題背景
- 資料庫版本:SQL Server 2005 Enterprise
- 作業系統:Windows Server 2003 Enterprise
- 觸發情境:資料庫卸離後,將資料磁碟移至另一台相同配置的主機,附加時失敗
根本原因
檔案系統權限不足。SQL Server 服務帳戶無法存取 .mdf/.ldf 檔案。
標準解決步驟
- 右鍵資料庫檔案所在 資料夾 → 內容 → 安全性
- 點選 編輯 → 新增
- 輸入服務帳戶名稱,常見帳戶:
Administrators、NETWORK SERVICE、SQLServerMSSQLUser$<機器名>$MSSQLSERVER、Everyone
(若不確定服務帳戶,可直接加入 Everyone 測試)
- 勾選 完全控制 → 確定 套用
進階情況:資料夾權限未繼承至檔案
若資料夾已設定權限但仍報錯 5123,原因通常是 資料夾權限未自動繼承至子檔案。
解決方法:逐檔設定權限
- 對每個資料庫檔案(.mdf、.ldf、.ndf)分別右鍵 → 內容 → 安全性
- 同樣新增服務帳戶並授予 完全控制
- 確認每個檔案的「安全性」頁籤顯示該帳戶擁有完全控制權限
驗證步驟
- 重新嘗試附加資料庫
- 若成功,檢查 SQL Server 錯誤記錄確認無存取警告
- 執行
DBCC CHECKDB 驗證資料庫完整性
預防建議
- 資料庫檔案目錄建立時,預先設定正確權限並啟用繼承
- 跨主機移動資料庫檔案後,務必重新驗證目標主機權限
- 使用專屬服務帳戶而非內建帳戶,便於權限管理與稽核
- 部署自動化腳本檢查關鍵目錄與檔案權限