[研究]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; |
設定完成後,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:\> |
上面敝人實際測試過可行。
(完)
沒有留言:
張貼留言