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

SQL Server 2005 附加資料庫錯誤 5120 (拒絕存取) 完整解決方案

     編輯:SQL Server 2005

錯誤現象

SSMS 附加 .mdf/.ldf 時彈出:
訊息 5120,層級 16,狀態 101:無法開啟實體檔案 "D:\Data\MyDb.mdf"。作業系統錯誤 5: "5(拒絕存取)。"

根本原因

SQL Server 服務啟動帳號(預設 NT Service\MSSQLSERVER 或 Network Service)對資料檔資料夾缺乏 **修改 (Modify)** 權限,無法開啟/建立記錄檔。

方案一:以系統管理員身分執行 SSMS(最快驗證)

  1. 開始功能表 → 「Microsoft SQL Server 2005」 → 右鍵「SQL Server Management Studio」 → 「以系統管理員身分執行」。
  2. 使用 Windows 驗證連線,再次嘗試附加,通常即可成功。
  3. 原理:管理員權限繼承可繞過檔案系統 ACL 檢查。

方案二:切換登入驗證模式(Windows Authentication)

  1. SSMS 連線視窗,「驗證」下拉選單選 Windows 驗證 連線。
  2. 附加成功後,若需混合模式,可在伺服器屬性 → 安全性 → 改回「SQL Server 和 Windows 驗證模式」,重啟服務生效。

方案三:變更 SQL Server 服務啟動帳號為 Local System(永久修正)

  1. 開啟 SQL Server Configuration Manager(或「SQL Server 2005 設定工具」→「SQL Server 組態管理員」)。
  2. 左側選 SQL Server 2005 服務,右側右鍵 SQL Server (MSSQLSERVER / SQLEXPRESS) → 內容。
  3. 「登入」頁籤 → 內建帳戶下拉選 Local System → 確定。
  4. 右鍵服務 → 重新啟動。
  5. 再次附加資料庫,錯誤消失。

注意:Local System 權限極高,生產環境建議改回 Network Service 或專用網域服務帳號,並對資料/記錄檔資料夾顯式授予該帳號 **修改** 權限(右鍵資料夾 → 安全性 → 編輯 → 新增 → 輸入服務帳號 → 勾選修改)。

方案四:授予資料夾權限給服務帳號(最佳實踐,不降低服務權限)

  1. 確認 SQL Server 服務啟動帳號(組態管理員 → 服務內容 → 登入頁籤)。
  2. 檔案總管 → 資料檔所在資料夾(如 D:\MyDbData)右鍵 → 內容 → 安全性 → 編輯 → 新增。
  3. 輸入服務帳號(如 NT Service\MSSQLSERVER 或 DOMAIN\sqlsvc),勾選 修改(含讀取、寫入、刪除)。
  4. 確定套用,重試附加。

附加後資料庫顯示「唯讀」解決

  1. SSMS 右鍵資料庫 → 內容 → 選項頁 → 「資料庫唯讀」設為 False。
  2. 或 T-SQL:ALTER DATABASE [MyDb] SET READ_WRITE;

原因同前:服務帳號無寫入權限導致資料庫以唯讀模式掛載。

總結對照表

方案適用場景風險建議
以管理員執行 SSMS臨時測試、開發機無快速驗證首選
切換 Windows 驗證混合模式下權限不足需重啟服務切回混合模式次選
服務帳號改 Local System快速永久修正、非生產環境權限過高、安全風險生產環境慎用
資料夾授權給服務帳號生產環境、最小權限原則無**最佳實踐**

常見誤區

  • 「複製檔案到預設 DATA 目錄就能附加」→ 僅解決路徑問題,**不解決權限問題**(預設目錄 ACL 已授權服務帳號)。
  • 「附加後改資料庫屬性唯讀為 False 就好」→ 治標不治本,後續寫入仍會失敗,必須修正檔案系統 ACL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved