當系統管理員遭到鎖定時連接到 SQL Server

本主題描述如何以系統管理員身分重新取得SQL Server Database Engine 的存取權。 系統管理員可能會因為下列其中一個原因而失去SQL Server實例的存取權:

  • 屬於 sysadmin 固定伺服器角色之成員的所有登入都因為錯誤而遭到移除。

  • 屬於 sysadmin 固定伺服器角色之成員的所有 Windows 群組都因為錯誤而遭到移除。

  • 屬於 sysadmin 固定伺服器角色之成員的登入供已經離開公司或沒有空的個人使用。

  • sa 帳戶已遭到停用或沒有人知道密碼。

您可以重新取得存取權的其中一種方式是重新安裝SQL Server,並將所有資料庫附加至新的實例。 這個解決方案相當耗時,而且,若要復原登入,可能需要從備份還原 master 資料庫。 如果 master 資料庫的備份較舊,可能不會有所有的資訊。 如果 master 資料庫的備份比較新,可能與先前的執行個體擁有相同的登入,因此,系統管理員仍然會遭到鎖定。

解決方案

使用-m-f選項,以單一使用者模式啟動SQL Server的實例。 電腦本機系統管理員群組的所有成員接著就能利用系統管理員 (sysadmin) 固定伺服器角色的成員身分,連線到 SQL Server 的執行個體。

注意

當您以單一使用者模式啟動SQL Server實例時,請先停止SQL Server Agent服務。 否則,SQL Server Agent可能會先連線,並防止您以第二個使用者身分連線。

當您搭配sqlcmd或 SQL Server Management Studio 使用-m選項時,可以限制與指定用戶端應用程式的連線。 例如, -m「sqlcmd」 會將連線限制為單一連線,且該連線必須將其識別為 sqlcmd 用戶端程式。 在單一使用者模式中啟動 SQL Server 且有未知的用戶端應用程式佔用唯一可用的連線時,請使用此選項。 若要透過 Management Studio 中的查詢編輯器進行連線,請使用-m「Microsoft SQL Server Management Studio - Query」。

重要

請勿將這個選項當做安全性功能使用。 用戶端應用程式會提供用戶端應用程式名稱,而且可能會在連接字串中提供假的名稱。

如需如何在單一使用者模式中啟動SQL Server的逐步指示,請參閱設定伺服器啟動選項 (SQL Server 組態管理員)

逐步指示

下列指示說明連線到在 Windows 8 或更新版本上執行的 SQL Server 2014 的程式。 針對舊版 SQL Server 或 Windows 提供了些微調整。 您必須在以本機系統管理員群組的成員身分登入 Windows 時執行這些指示,並假設電腦上已安裝SQL Server Management Studio。

  1. 從 [開始] 頁面開始SQL Server Management Studio。 在 [檢視] 功能表上,選取 [已註冊的伺服器] (如果您的伺服器尚未註冊,請以滑鼠右鍵按一下 [本機伺服器群組],指向 [工作],然後按一下 [註冊本機伺服器])。

  2. 在 [已註冊的伺服器] 區域中,以滑鼠右鍵按一下您的伺服器,然後按一下 [SQL Server 組態管理員]。 這樣應該會要求以系統管理員身分執行的權限,然後開啟組態管理員程式。

  3. 關閉 Management Studio。

  4. 在 SQL Server 組態管理員中,選取位於左側窗格中的 [SQL Server 服務]。 在右窗格中,尋找您的 SQL Server 執行個體。 (SQL Server 的預設執行個體會在電腦名稱後面加上 (MSSQLSERVER)。 具名執行個體會以 [已註冊的伺服器] 中顯示的相同大寫名稱出現)。 以滑鼠右鍵按一下SQL Server的實例,然後按一下 [屬性]。

  5. 在 [ 啟動參數 ] 索引標籤的 [ 指定啟動參數 ] 方塊中,輸入 -m ,然後按一下 Add 。 (這是虛線,然後接著小寫字母 m)。

    注意

    如果是某些 SQL Server 的舊版,則沒有 [啟動參數] 索引標籤。在該情況下,請在 [進階] 索引標籤上,按兩下 [啟動參數]。 這些參數就會在非常小的視窗中開啟。 請小心不要變更任何現有參數。 在結尾處,加上新的參數 ;-m,然後按一下 [OK] (這是分號,然後接著虛線和小寫字母 m)。

  6. 按一下 OK ,然後在訊息重新開機之後,以滑鼠右鍵按一下您的伺服器名稱,然後按一下 [ 重新開機]。

  7. SQL Server重新開機之後,您的伺服器將會處於單一使用者模式。 請確定SQL Server Agent未執行。 如果已啟動,它將會佔用您的唯一連接。

  8. 在 Windows 8 開始畫面上,以滑鼠右鍵按一下 Management Studio 的圖示。 在畫面底部,選取 [以系統管理員身分執行] (這樣會將您的系統管理員認證傳遞給 SSMS)。

    注意

    如果是舊版 Windows,[以系統管理員身分執行] 選項會顯示成子功能表。

    在某些組態中,SSMS 會嘗試建立許多連接。 多重連接將會失敗,因為 SQL Server 處於單一使用者模式。 您可以選取下列其中一項動作來執行。 執行下列其中一項動作。

    1. 使用 Windows 驗證 (包含您的系統管理員認證) 透過 [物件總管] 連接。 依序展開 [安全性] 和 [登入],然後按兩下您自己的登入。 在 [ 伺服器角色] 頁面上,選取 sysadmin ,然後按一下 OK

    2. 不透過 [物件總管] 連接,而是使用 Windows 驗證 (包含您的系統管理員認證) 透過查詢視窗連接 (如果您未與 物件總管.) 執行程式碼連線,您只能以這種方式連線,例如下列程式碼,以新增屬於固定伺服器角色成員 sysadmin 的新 Windows 驗證登入。 下列範例會加入名為 CONTOSO\PatK 的網域使用者。

      CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS;  
      ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];  
      
    3. 如果您的 SQL Server 是以混合驗證模式執行,請使用 Windows 驗證 (包含您的系統管理員認證) 透過查詢視窗連接。 執行下列程式碼,以建立新的SQL Server驗證登入,該登入是固定伺服器角色的成員 sysadmin

      CREATE LOGIN TempLogin WITH PASSWORD = '************';  
      ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;  
      

      警告

      請將 ************ 取代成增強式密碼。

    4. 如果您的SQL Server是以混合驗證模式執行,而且您想要重設帳戶的密碼 sa ,請使用 Windows 驗證 (與查詢視窗連線,其中包含系統管理員認證) 。 使用下列語法變更帳戶的密碼 sa

      ALTER LOGIN sa WITH PASSWORD = '************';  
      

      警告

      請將 ************ 取代成增強式密碼。

  9. 下列步驟現在會將SQL Server變更回多使用者模式。 關閉 SSMS。

  10. 在 SQL Server 組態管理員中,選取位於左側窗格中的 [SQL Server 服務]。 在右窗格中,以滑鼠右鍵按一下SQL Server的實例,然後按一下 [屬性]。

  11. 在 [ 啟動參數 ] 索引標籤的 [ 現有參數 ] 方塊中,選取 -m ,然後按一下 Remove

    注意

    如果是某些 SQL Server 的舊版,則沒有 [啟動參數] 索引標籤。在該情況下,請在 [進階] 索引標籤上,按兩下 [啟動參數]。 這些參數就會在非常小的視窗中開啟。 移除您稍早新增的 ;-m ,然後按一下 OK

  12. 以滑鼠右鍵按一下您的伺服器名稱,然後按一下 [重新啟動]。

現在,您應該能夠正常連線到其中一個帳戶,而帳戶現在是固定伺服器角色的成員 sysadmin

另請參閱

以單一使用者模式啟動 SQL Server
Database Engine 服務啟動選項