當系統管理員遭到鎖定時連接到 SQL Server
本主題描述如何以系統管理員身分重新取得 SQL Server Database Engine 的存取權限。系統管理員可能會由於下列其中一個原因失去 SQL Server 執行個體的存取權限:
屬於 sysadmin 固定伺服器角色之成員的所有登入被錯誤地移除。
屬於 sysadmin 固定伺服器角色之成員的所有 Windows 群組被錯誤地移除。
屬於 sysadmin 固定伺服器角色之成員的登入是供已經離開公司或不在辦公室的個人使用。
sa 帳戶已遭到停用或沒有人知道密碼。
您可以重新取得存取權的其中一種方式就是重新安裝 SQL Server,並將所有資料庫附加到新的執行個體。 這個解決方案相當耗時,而且若要復原登入,可能需要從備份還原 master 資料庫。 如果 master 資料庫的備份較舊,可能不會有所有的資訊。 如果 master 資料庫的備份比較新,可能與先前的執行個體擁有相同的登入,因此,系統管理員仍然會遭到鎖定。
解決方案
以單一使用者模式使用 -m 或 -f 選項啟動 SQL Server 的執行個體。 接著,電腦本機 Administrators 群組的任何成員都可以利用 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 2012 的程序。 針對舊版 SQL Server 或 Windows 提供了些微調整。 您必須在登入 Windows 成為本機 Administrators 群組的成員時執行這些指示,而且這些指示會假設電腦已安裝了 SQL Server Management Studio。
在起始頁上,啟動 SQL Server Management Studio。 在 [檢視] 功能表上,選取 [已註冊的伺服器] (如果您的伺服器尚未註冊,請以滑鼠右鍵按一下 [本機伺服器群組]、指向 [工作],然後按一下 [註冊本機伺服器])。
在 [已註冊的伺服器] 區域中,以滑鼠右鍵按一下您的伺服器,然後按一下 [SQL Server 組態管理員]。 這樣應該會要求以系統管理員身分執行的權限,然後開啟組態管理員程式。
關閉 Management Studio。
在 [SQL Server 組態管理員] 的左窗格中,選取 [SQL Server 服務]。 在右窗格中,尋找您的 SQL Server 執行個體 (SQL Server 的預設執行個體會在電腦名稱後面加上 (MSSQLSERVER)。 具名執行個體會以 [已註冊的伺服器] 中顯示的相同大寫名稱出現)。以滑鼠右鍵按一下 SQL Server 的執行個體,然後按一下 [屬性]。
在 [啟動參數] 索引標籤的 [指定啟動參數] 方塊中,輸入 -m,然後按一下 [Add] (這是虛線,然後接著小寫字母 m)。
[!附註]
如果是某些舊版 SQL Server,則沒有 [啟動參數] 索引標籤。 在該情況下,請在 [進階] 索引標籤上,按兩下 [啟動參數]。 這些參數就會在非常小的視窗中開啟。 請小心不要變更任何現有參數。 在結尾處,加上新的參數 ;-m,然後按一下 [OK] (這是分號,然後接著虛線和小寫字母 m)。
按一下 [確定],然後在重新啟動的訊息後面,以滑鼠右鍵按一下您的伺服器名稱,然後按一下 [重新啟動]。
當 SQL Server 重新啟動之後,您的伺服器將處於單一使用者模式。請確定 SQL Server Agent 並未執行。 如果已啟動,它將會佔用您的唯一連接。
在 Windows 8 的 [開始] 畫面上,以滑鼠右鍵按一下 Management Studio 的圖示。 在畫面底部,選取 [以系統管理員身分執行] (這樣會將您的系統管理員認證傳遞給 SSMS)。
[!附註]
如果是舊版 Windows,[以系統管理員身分執行] 選項會顯示成子功能表。
在某些組態中,SSMS 會嘗試建立許多連接。 多重連接將會失敗,因為 SQL Server 處於單一使用者模式。 您可以選取下列其中一項動作來執行。 執行下列其中一項動作。
使用 Windows 驗證 (包含您的系統管理員認證) 透過 [物件總管] 連接。 依序展開 [安全性] 和 [登入],然後按兩下您自己的登入。 在 [伺服器角色] 頁面上,選取 [系統管理員 (sysadmin)],然後按一下 [確定]。
不透過 [物件總管] 連接,而是使用 Windows 驗證 (包含您的系統管理員認證) 透過查詢視窗連接 (如果您沒有透過 [物件總管] 連接,就只能以這種方式連接)。執行程式碼 (例如下列程式碼) 來加入屬於系統管理員 (sysadmin) 固定伺服器角色成員的新 Windows 驗證登入。 下列範例會加入名為 CONTOSO\PatK 的網域使用者。
CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
如果您的 SQL Server 是以混合驗證模式執行,請使用 Windows 驗證 (包含您的系統管理員認證) 透過查詢視窗連接。 執行程式碼 (例如下列程式碼) 來建立屬於系統管理員 (sysadmin) 固定伺服器角色成員的新 SQL Server 驗證登入。
CREATE LOGIN TempLogin WITH PASSWORD = '************'; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
注意 請將 ************ 取代成增強式密碼。
如果您的 SQL Server 是以混合驗證模式執行,而且您想要重設 sa 帳戶的密碼,請使用 Windows 驗證 (包含您的系統管理員認證) 透過查詢視窗連接。 您可以使用下列語法來變更 sa 帳戶的密碼。
ALTER LOGIN sa WITH PASSWORD = '************';
注意 請將 ************ 取代成增強式密碼。
下列步驟現在會將 SQL Server 變更回多使用者模式。 關閉 SSMS。
在 [SQL Server 組態管理員] 的左窗格中,選取 [SQL Server 服務]。 在右窗格中,以滑鼠右鍵按一下 SQL Server 的執行個體,然後按一下 [屬性]。
在 [啟動參數] 索引標籤的 [現有參數] 方塊中,選取 -m,然後按一下 [Remove]。
[!附註]
如果是某些舊版 SQL Server,則沒有 [啟動參數] 索引標籤。 在該情況下,請在 [進階] 索引標籤上,按兩下 [啟動參數]。 這些參數就會在非常小的視窗中開啟。 移除您先前加入的 ;-m,然後按一下 [確定]。
以滑鼠右鍵按一下您的伺服器名稱,然後按一下 [重新啟動]。
現在,您應該能夠使用其中一個目前屬於系統管理員 (sysadmin) 固定伺服器角色成員的帳戶進行正常連接。