附加資料庫時遇到 Access Denied / Error 5120 / Error 5123,核心原因多為 資料/記錄檔 NTFS 權限不足。提供四種解法,由簡至繁。
方案一:移至預設資料目錄 (最快測試)
- 將
.mdf/.ldf 複製到 C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ (或對應實例路徑)。
- SSMS 右鍵 Databases → Attach → 選取該路徑檔案,通常即可成功。
- 缺點:C 槽空間壓力、重灌系統易遺失、不符合生產規範。
方案二:修改實例預設資料庫路徑 (一勞永逸)
- SSMS 連線實例 → 右鍵 Properties → Database Settings。
- 將 Database default locations (Data / Log) 改為專用磁碟資料夾 (如
E:\SQLData\, L:\SQLLogs\)。
- 後續建立/附加資料庫預設即落在此路徑,權限由 SQL Server 服務帳號自動擁有。
方案三:給目標資料夾授權 Everyone Full Control (最直接)
- 檔案總管右鍵資料夾 → Properties → Security → Edit → Add。
- 輸入
Everyone → Check Names → OK。
- 選取 Everyone,勾選 Full Control → OK 套用。
- 風險:任何登入該機器的使用者皆可讀寫資料庫檔案,生產環境不建議。
方案四:精確授權給 SQL Server 服務帳號 (生產標準)
- 查詢 SQL Server 服務啟動帳號:
SELECT servicename, service_account FROM sys.dm_server_services WHERE servicename LIKE 'SQL Server%';
- 假設帳號為
DOMAIN\SQLSvc。
- 資料夾/檔案右鍵 → Security → Edit → Add → 輸入
DOMAIN\SQLSvc → Check Names。
- 授予 Modify (含讀寫、刪除、列出) 或 Full Control。
- 若使用 Managed Service Account (gMSA) 或 虛擬帳號 (NT SERVICE\MSSQLSERVER),同樣在 ACL 中搜尋對應名稱授權。
進階:檔案層級 ACL 設定 (含繼承控制)
對 .mdf/.ldf 個別檔案:
右鍵 → Properties → Security → Advanced → Disable inheritance → Convert inherited permissions → 移除多餘群組 → Add 服務帳號 → Full Control → 勾選 Replace all child object permission entries (若為資料夾)。
常見誤區
- 只給資料夾權限不給檔案:檔案若已存在且 ACL 未繼承,仍會失敗。
- 授權給
Users 群組:SQL Server 服務帳號不一定在 Users 群組。
- 跨機器附加 (檔案在網路共享):不支援,必須先複製到本機磁碟。