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

善用 SQL Server xp_cmdshell 遠端登出佔用會話:解決 RDP 連線上限問題

     編輯:關於SqlServer

場景痛點

遠端桌面 (RDP) 連線時提示「已超過最大連線數」,無法登入伺服器。此時若無實體存取權限,透過已建立連線的 SQL Server 執行系統命令強制登出佔用會話,是快速恢復存取的有效手段。

操作步驟

  1. 使用 SSMS 或 sqlcmd 連線至目標 SQL Server 實例 (需具備 sysadmin 權限且 xp_cmdshell 已啟用)。
  2. 執行 quser 查詢目前登入會話:
EXEC xp_cmdshell 'quser';

輸出範例:

 USERNAME    SESSIONNAME  ID  STATE   IDLE TIME  LOGON TIME
 administrator  rdp-tcp#0   1   Active      .   2024/3/15 08:30
 user1         rdp-tcp#1   2   Active   1:23   2024/3/15 09:15
  1. 根據 ID 強制登出指定會話 (例如 ID=2):
EXEC xp_cmdshell 'logoff 2';

成功後該會話即被登出,釋出 RDP 連線名額。

前置條件與注意事項

  • 權限需求:執行帳號需為 sysadmin 固定伺服器角色成員。
  • xp_cmdshell 啟用:預設關閉,需執行:
    EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
  • 安全性警示:啟用 xp_cmdshell 會顯著擴大攻擊面。建議:
    ① 臨時啟用、用畢立即關閉;
    ② 限制僅特定管理員帳號可執行 (透過 GRANT EXECUTE ON xp_cmdshell TO [login]);
    ③ 事後審計相關執行記錄。
  • 替代方案:若環境嚴禁啟用 xp_cmdshell,可嘗試透過 PowerShell Remoting、Windows Admin Center 或實體機房 KVM 操作。

快速腳本封裝 (可存為預存程序)

CREATE PROC dbo.usp_LogoffRdpSession @SessionID INT
WITH EXECUTE AS OWNER
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @cmd NVARCHAR(100) = N'logoff ' + CAST(@SessionID AS NVARCHAR(10));
    EXEC xp_cmdshell @cmd, NO_OUTPUT;
END;

使用方式:EXEC usp_LogoffRdpSession 2;

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved