事件
3月31日 下午11時 - 4月2日 下午11時
最大的 SQL、網狀架構和 Power BI 學習事件。 3 月 31 日 - 4 月 2 日。 使用程式代碼 FABINSIDER 來節省 $400 美元。
立即註冊
適用於:SQL Server
此文章描述如果您遭到鎖定,如何以系統管理員身分重新取得 SQL Server 資料庫引擎 的存取權。系統管理員可能因為下列其中一個原因而失去 SQL Server 執行個體的存取權:
屬於系統管理員固定伺服器角色之成員的所有登入都因為錯誤而遭到移除。
屬於系統管理員固定伺服器角色之成員的所有 Windows 群組都因為錯誤而遭到移除。
屬於系統管理員固定伺服器角色之成員的登入帳號是為那些已經離開公司或不再可用的人的。
sa
帳戶已遭到停用或沒有人知道密碼。
為了解決您的存取權問題,建議您以單一使用者模式啟動 SQL Server 的執行個體。 此模式可防止當您嘗試重新取得存取權時發生其他連線。 從這裡,您可以連線到 SQL Server 執行個體,並將登入新增至系統管理員 (sysadmin) 伺服器角色。 逐步指示一節會提供此解決方案的詳細步驟。
您可以從命令列中使用 -m
或 -f
選項,以單一使用者模式啟動 SQL Server 的執行個體。 電腦本機系統管理員群組的所有成員接著就能利用系統管理員 (sysadmin) 固定伺服器角色的成員身分,連線到 SQL Server 的執行個體。
當您以單一使用者模式啟動執行個體時,請停止 SQL Server Agent 服務。 否則,SQL Server Agent 可能會先連線,取得與伺服器的唯一可用連線,並封鎖您登入。
在您能夠登入之前,未知的用戶端應用程式也可能取得唯一可用的連線。 為了避免發生這種情況,您可以使用 -m
選項,後面接著應用程式名稱,以將連線限制為來自指定應用程式的單一連線。 例如,使用 -mSQLCMD
啟動 SQL Server,會將連線限制為單一連線,以將自己識別為 sqlcmd 用戶端程式。 若要在 Management Studio 中透過查詢編輯器進行連線,請使用 -m"Microsoft SQL Server Management Studio - Query"
。
重要
請勿搭配應用程式名稱使用 -m
作為安全性功能。 用戶端應用程式會透過連接字串設定來指定應用程式名稱,因此其可利用假的名稱輕鬆地偽造。
下表摘要說明在命令列中,以單一使用者模式啟動執行個體的各種方式。
選項 | 描述 | 使用時機 |
---|---|---|
-m |
將連線限制為單一連線 | 當沒有其他使用者嘗試連線到執行個體,或您不確定用來連線到執行個體的應用程式名稱時。 |
-mSQLCMD |
將連線限制為單一連線,其必須將自己識別為 sqlcmd 用戶端程式 | 您計劃使用 sqlcmd 連線到執行個體,而且您想要防止其他應用程式占用唯一可用的連線。 |
-m"Microsoft SQL Server Management Studio - Query" |
將連線限制為單一連線,其必須將自己識別為 Microsoft SQL Server Management Studio - 查詢應用程式。 | 您計劃透過 Management Studio 中的查詢編輯器連線到執行個體,而且您想要防止其他應用程式占用可用的連線。 |
-f |
將連線限制為單一連線,並以基本組態來啟動執行個體 | 某些其他配置正阻止您啟動。 |
如需如何以單一使用者模式啟動 SQL Server 的逐步指示,請參閱以單一使用者模式啟動 SQL Server。
注意
嘗試開啟此筆記本之前,請先檢查本機電腦上是否已安裝 Azure Data Studio。 若要安裝 Azure Data Studio,請前往了解如何安裝 Azure Data Studio。
打開提高權限的 Windows PowerShell 命令提示符。
設定服務名稱和 SQL Server 執行個體,以及 Windows 登入變數。 將這些值替換為符合您環境的值
如果您有預設執行個體,請使用不含執行個體名稱的 MSSQLSERVER
。
$service_name = "MSSQL`$instancename"
$sql_server_instance = "machine_name\instance"
$login_to_be_granted_access = "[CONTOSO\PatK]"
停止 SQL Server 服務,以便使用下列命令以單一使用者模式重新開機:
如果您有預設執行個體,請使用不含執行個體名稱的 MSSQLSERVER
。
net stop $service_name
現在,以單一使用者模式啟動您的 SQL Server 執行個體,只允許 SQLCMD.exe 連線 (/mSQLCMD
)︰
注意
請務必使用大寫 SQLCMD
如果您有預設執行個體,請使用不含執行個體名稱的 MSSQLSERVER
。
net start $service_name /f /mSQLCMD
使用 sqlcmd,執行 CREATE LOGIN
命令後面接著 ALTER SERVER ROLE
命令。 此步驟假設您已使用屬於本機系統管理員群組成員的帳戶登入 Windows。 此步驟假設您已將網域和登入名稱更換為您想要賦予系統管理員成員資格的憑證。
如果您有預設執行個體,請使用伺服器的名稱。
sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN $login_to_be_granted_access FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER $login_to_be_granted_access; "
如果您收到下列錯誤,您必須確定沒有其他 sqlcmd 已連線到 SQL Server:
Sqlcmd: Error: Microsoft ODBC Driver X for SQL Server : Login failed for user 'CONTOSO\BobD'. Reason: Server is in single user mode. Only one administrator can connect at this time.
混合模式 (選擇性):如果您的 SQL Server 執行個體是以混合驗證模式執行,您也可以:
將系統管理員角色的成員資格授與 SQL Server 的登入帳戶。 執行程式碼 (例如下列程式碼) 來建立屬於系統管理員 (sysadmin) 固定伺服器角色成員的新 SQL Server 驗證登入。 以您選擇的強式密碼取代 <strong_password>
。
如果您有預設執行個體,請使用伺服器的名稱。
$strong_password = "<strong_password>"
sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN TempLogin WITH PASSWORD = '$strong_password'; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin; "
此外,如果您的 SQL Server 執行個體是以混合驗證模式執行,而且您想要重設已啟用 sa
帳戶的密碼。 您可以使用下列語法來變更 sa 帳戶的密碼。 請務必以您選擇的強式密碼取代<strong_password>
:
如果您有預設執行個體,請使用伺服器的名稱。
$strong_password = "<strong_password>"
sqlcmd.exe -E -S $sql_server_instance -Q "ALTER LOGIN sa WITH PASSWORD = $strong_password; "
以多使用者模式停止並重新啟動您的 SQL Server 執行個體
如果您有預設執行個體,請使用不含執行個體名稱的 MSSQLSERVER
。
net stop $service_name
net start $service_name
這些指示假設:
SQL Server 在 Windows 8 或更高版本上執行。 適當地針對舊版 SQL Server 或 Windows 提供些微調整。
SQL Server Management Studio 安裝於電腦上。
以本機系統管理員群組成員身分登入 Windows 時,執行這些指示。
在 Windows [開始] 功能表中,以滑鼠右鍵按一下 SQL Server 組態管理員的圖示,然後選擇 [以系統管理員身分執行],以將您的系統管理員認證傳遞給組態管理員。
在 SQL Server 組態管理員中,選取位於左側窗格中的 [SQL Server 服務]。 在右窗格中,尋找您的 SQL Server 執行個體。 (SQL Server 的預設執行個體會在電腦名稱後面加上 (MSSQLSERVER)。 命名的執行個體會以其在 [已註冊的伺服器] 中顯示的相同大寫名稱出現。 以滑鼠右鍵按一下 SQL Server 執行個體,然後選取 [屬性]。
在 [啟動參數] 索引標籤的 [指定啟動參數] 方塊中,輸入 ,然後選取 [加入]。 (這是虛線,然後接著小寫字母 m)。
如果是某些 SQL Server 的舊版,則沒有 [啟動參數] 索引標籤。在該情況下,請在 [進階] 索引標籤上,按兩下 [啟動參數]。 這些參數就會在小的視窗中開啟。 請小心不要變更任何現有參數。 在結尾處,加上新的參數 ;-m
,然後選取 [確定]。 (這是分號,然後接著虛線和小寫字母 m)。
選取 [確定],在重新啟動的訊息後面,以滑鼠右鍵按一下您的伺服器名稱,然後選取 [重新啟動]。
重新啟動 SQL Server 之後,您的伺服器將處於單一使用者模式。 請確定 SQL Server Agent 沒有在執行。 如果已啟動,它將會佔用您的唯一連接。
從 Windows [開始] 功能表中,以滑鼠右鍵按一下 Management Studio 的圖示,然後選取 [以系統管理員身分執行]。 這樣會將您的系統管理員認證傳遞給 SSMS。
如果是舊版 Windows,[以系統管理員身分執行] 選項會顯示在子選單中。
在某些組態中,SSMS 會嘗試建立許多連接。 多重連接將會失敗,因為 SQL Server 處於單一使用者模式。 根據您的情況,執行下列其中一個動作。
使用包含系統管理員認證的 Windows 驗證連線至 [物件總管]。 展開 安全性,展開 登入,然後雙擊您自己的登入。 在 [伺服器角色] 頁面上,選取 [系統管理員],然後選取 [確定]。
不透過 [物件總管] 連接,而是使用 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 = '<strong_password>';
ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
警告
使用強式密碼取代 <strong_password>。
如果您的 SQL Server 是以混合驗證模式執行,而且您想要重設 sa
帳戶的密碼,請使用 Windows 驗證 (包含您的系統管理員認證) 透過查詢視窗連接。 您可以使用下列語法來變更 sa
帳戶的密碼。
ALTER LOGIN sa WITH PASSWORD = '<strong_password>';
警告
使用強式密碼取代 <strong_password>。
關閉 Management Studio。
接下來的數個步驟會變更 SQL Server 以回到多使用者模式。 在 SQL Server 組態管理員中,選取位於左側窗格中的 [SQL Server 服務]。
在右窗格中,滑鼠右鍵按一下 [SQL Server 的執行個體],然後選取 [屬性]。
在 [啟動參數] 索引標籤的 [現有參數] 方塊中,選取 ,然後選取 [移除]。
如果是某些 SQL Server 的舊版,則沒有 [啟動參數] 索引標籤。在該情況下,請在 [進階] 索引標籤上,按兩下 [啟動參數]。 這些參數就會在小的視窗中開啟。 移除您先前加入的 ;-m
,然後選取 [確定]。
以滑鼠右鍵按一下您的伺服器名稱,然後選取 [重新啟動]。 如果您在以單一使用者模式啟動 SQL Server 之前停止了 SQL Server Agent,請務必再次加以啟動。
現在,您應該能夠使用其中一個目前屬於系統管理員 (sysadmin) 固定伺服器角色成員的帳戶進行正常連接。
事件
3月31日 下午11時 - 4月2日 下午11時
最大的 SQL、網狀架構和 Power BI 學習事件。 3 月 31 日 - 4 月 2 日。 使用程式代碼 FABINSIDER 來節省 $400 美元。
立即註冊訓練
認證
Microsoft Certified: Azure Database Administrator Associate - Certifications
使用 Microsoft PaaS 關聯式資料庫供應項目管理用於雲端、內部部署和混合關聯式資料庫的 SQL Server 資料庫基礎結構。
文件
以單一使用者模式啟動 SQL Server - SQL Server
了解 SQL Server 中的單一使用者模式。 查看此模式何時有用,以及如何使用啟動選項 -m,在此模式中啟動 SQL Server 的執行個體。
變更所使用之帳戶的密碼 (SQL Server 組態管理員) - SQL Server
了解如何變更資料庫引擎和 SQL Server Agent 所使用帳戶的密碼。 瞭解變更密碼很重要的時機。
了解如何在 SQL Server 中變更伺服器驗證模式。 您可針對此工作使用 SQL Server Management Studio 或 Transact-SQL。