2025年3月31日 星期一

[研究]SQL Server 2019如何禁止sa或sysadmin群組中帳號遠端存取資料庫

[研究]SQL Server 2019如何禁止sa或sysadmin群組中帳號遠端存取資料庫

2025-03-31

限制 sa 帳戶的存取權限

連線到 SQL Server Management Studio (SSMS)

執行下列 SQL 語句來停用 sa 帳戶:

ALTER LOGIN sa DISABLE;   

若仍需使用 sa,但只限本機存取,可以變更 sa 密碼並強制使用 Windows 身分驗證。

**********

建立登入觸發器 (Logon Trigger) 限制遠端 sysadmin 登入

建立觸發器來限制 sa 帳號若不是從某電腦登入,拒絕:

CREATE TRIGGER BlockRemoteSysadminLogin
ON ALL SERVER
FOR LOGON
AS
BEGIN
    IF ORIGINAL_LOGIN() IN ('sa') AND HOST_NAME() NOT IN ('本機電腦名稱')
    BEGIN
        ROLLBACK;
    END
END;


註:主機名稱請在 SSMS 用 SELECT HOST_NAME() 取得,而非用「命令提示字元」(cmd.exe) 用 hostname 指令取得,有可能不同。

建立觸發器來限制 sysadmin 群組若不是從某電腦登入,拒絕:

CREATE TRIGGER BlockRemoteSysadminLogin
ON ALL SERVER
FOR LOGON
AS
BEGIN
    IF IS_SRVROLEMEMBER('sysadmin', ORIGINAL_LOGIN()) = 1 
       AND HOST_NAME() NOT IN ('本機電腦名稱')
    BEGIN
        ROLLBACK;
    END
END;








注意,本機電腦名稱要用 hostname 的結果,不可用句點 (.) 代替,否則之後會完全不能進去



設定完成後,sysadmin 只能從本機登入。

********************************************************************************

【若不小心 "本機電腦名稱" 設定為 "." 】

T-SQL 的 "本機電腦名稱" 若設定為 "." 後,會被立刻強制登出 SSMS,無法再下任何 T-SQL 指令,如何解決。

使用 SQL Server 單人模式 (Single-User Mode)

C:\>net stop MSSQLSERVER
SQL Server (MSSQLSERVER) 服務正在停止.
SQL Server (MSSQLSERVER) 服務已經成功停止。
C:\>net start MSSQLSERVER /m
SQL Server (MSSQLSERVER) 服務正在啟動 .
SQL Server (MSSQLSERVER) 服務已經啟動成功。

C:\>sqlcmd -S localhost -E
1> DROP TRIGGER BlockRemoteSysadminLogin ON ALL SERVER;
2> GO
1> exit

C:\>net stop MSSQLSERVER
SQL Server (MSSQLSERVER) 服務正在停止.
SQL Server (MSSQLSERVER) 服務已經成功停止。

C:\>net start MSSQLSERVER
SQL Server (MSSQLSERVER) 服務正在啟動 .
SQL Server (MSSQLSERVER) 服務已經啟動成功。

C:\>

上面敝人實際測試過可行。

(完)


沒有留言:

張貼留言