遠端桌面 (RDP) 連線時提示「已超過最大連線數」,無法登入伺服器。此時若無實體存取權限,透過已建立連線的 SQL Server 執行系統命令強制登出佔用會話,是快速恢復存取的有效手段。
sysadmin 權限且 xp_cmdshell 已啟用)。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
EXEC xp_cmdshell 'logoff 2';
成功後該會話即被登出,釋出 RDP 連線名額。
sysadmin 固定伺服器角色成員。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;