首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2008 R2 附加資料庫失敗:權限問題四大解決方案

     編輯:關於SqlServer

附加資料庫時遇到 Access Denied / Error 5120 / Error 5123,核心原因多為 資料/記錄檔 NTFS 權限不足。提供四種解法,由簡至繁。

方案一:移至預設資料目錄 (最快測試)

  • 將 .mdf/.ldf 複製到 C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ (或對應實例路徑)。
  • SSMS 右鍵 Databases → Attach → 選取該路徑檔案,通常即可成功。
  • 缺點:C 槽空間壓力、重灌系統易遺失、不符合生產規範。

方案二:修改實例預設資料庫路徑 (一勞永逸)

  1. SSMS 連線實例 → 右鍵 Properties → Database Settings。
  2. 將 Database default locations (Data / Log) 改為專用磁碟資料夾 (如 E:\SQLData\, L:\SQLLogs\)。
  3. 後續建立/附加資料庫預設即落在此路徑,權限由 SQL Server 服務帳號自動擁有。

方案三:給目標資料夾授權 Everyone Full Control (最直接)

  1. 檔案總管右鍵資料夾 → Properties → Security → Edit → Add。
  2. 輸入 Everyone → Check Names → OK。
  3. 選取 Everyone,勾選 Full Control → OK 套用。
  4. 風險:任何登入該機器的使用者皆可讀寫資料庫檔案,生產環境不建議。

方案四:精確授權給 SQL Server 服務帳號 (生產標準)

  1. 查詢 SQL Server 服務啟動帳號:
    SELECT servicename, service_account FROM sys.dm_server_services WHERE servicename LIKE 'SQL Server%';
  2. 假設帳號為 DOMAIN\SQLSvc。
  3. 資料夾/檔案右鍵 → Security → Edit → Add → 輸入 DOMAIN\SQLSvc → Check Names。
  4. 授予 Modify (含讀寫、刪除、列出) 或 Full Control。
  5. 若使用 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 群組。
  • 跨機器附加 (檔案在網路共享):不支援,必須先複製到本機磁碟。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved