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

SQL Server 服務無法自動啟動?登入失敗錯誤 1069 完整排查指南

     編輯:關於SqlServer

現象描述

重啟伺服器後,SQL Server 服務(MSSQLSERVER)未自動啟動。手動啟動時彈出錯誤:

「由於登入失敗而無法啟動服務」
「發生錯誤 1069:由於登入失敗而無法啟動服務」

根本原因

SQL Server 服務設定為使用特定 Windows 帳號登入(預設常為 Administrator 或自訂帳號)。當該帳號的**密碼變更**後,服務仍嘗試使用舊密碼登入,導致驗證失敗、服務無法啟動。

四種解決方案(由簡單到最佳實務)

方案 1:清空 Administrator 密碼(不推薦,降低安全性)

將 Administrator 密碼設為空白,服務若使用 Administrator 登入即可通過。缺點:嚴重違反密碼策略,生產環境嚴禁。

方案 2:同步更新服務登入密碼(臨時修復)

  1. 開啟「服務」(services.msc)。
  2. 找到 MSSQLSERVER,右鍵→內容→「登入」頁籤。
  3. 選擇「此帳戶」,點選「瀏覽」輸入 Administrator,輸入**新密碼**確定。
  4. 重新啟動服務(或重啟伺服器)。

缺點:每次變更密碼都需手動同步,極易遺漏。

方案 3:建立專用服務帳號(改善但仍需維護)

  1. 「電腦管理」→「本機使用者和群組」→新增使用者 sqlsvc,設定強密碼、密碼永不過期。
  2. 將 sqlsvc 加入 Administrators 群組(SQL Server 需本機管理員權限)。
  3. 按方案 2 步驟將服務登入帳號改為 sqlsvc。

優點:隔離服務帳號,避免 Administrator 密碼變更影響。缺點:仍需定期輪換密碼並同步。

方案 4:使用虛擬服務帳號 / 群組受控服務帳號(最佳實務,SQL 2012+ / Windows Server 2012+)

現代 Windows 提供兩種免密碼管理的帳號類型:

帳號類型格式適用版本特點
虛擬服務帳號 (VSA)NT SERVICE\MSSQLSERVERSQL 2012+ / Win 2008 R2+自動管理密碼、具網路身分、無需加入管理員群組(授權 Perform volume maintenance tasks 等必要權限即可)
群組受控服務帳號 (gMSA)DOMAIN\gMSA_Name$Win 2012+ / SQL 2014+跨伺服器共用、自動輪換密碼、適合 AlwaysOn/叢集環境

啟用虛擬服務帳號步驟

  1. 服務內容→「登入」頁籤→選擇「此帳戶」。
  2. 輸入 NT SERVICE\MSSQLSERVER(預設實例)或 NT SERVICE\MSSQL$INSTANCE_NAME(具名實例)。
  3. 密碼欄位**留白**,確定。
  4. 重啟服務驗證。

進階排查:若上述皆無效

  1. 檢查事件檢視器:Windows Logs → System / Application,搜尋 Event ID 7024、18456、17058 等錯誤細節。
  2. 確認帳號權限:服務帳號需具備「作為服務登入」(SeServiceLogonRight)、「調整程序記憶體配額」、「取代程序層級 Token」等本機安全性原則權限。
  3. 檢查資料庫檔案權限:服務帳號對 .mdf、.ldf、備份目錄、錯誤日誌目錄需有完整存取權(NTFS ACL)。
  4. 叢集環境:若為 SQL Server Failover Cluster,需使用網域帳號或 gMSA,並確認叢集資源相依性正確。

預防措施

  • 建立「密碼變更檢核清單」:變更任何服務帳號密碼時,同步更新所有相依服務、排程工作、IIS 應用程式集區、連結伺服器登入。
  • 導入密碼管理工具(如 CyberArk、Thycotic、Azure Key Vault)自動化輪換與同步。
  • 監控服務狀態:Zabbix、SCOM、Prometheus + node_exporter 監控關鍵服務運行狀態,異常即時告警。

快速參考指令

REM 查詢服務登入帳號
sc qc MSSQLSERVER

REM 修改為虛擬服務帳號 (需管理員權限 CMD)
sc config MSSQLSERVER obj= "NT SERVICE\MSSQLSERVER" password= ""

REM 重啟服務
net stop MSSQLSERVER && net start MSSQLSERVER
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved