[MSSQL]利用logon trigger來限制登入

有關資料庫的討論, 都可以在這發表哦~~
回覆文章
頭像
tim
文章: 1288
註冊時間: 2008年 11月 26日, 00:49

[MSSQL]利用logon trigger來限制登入

文章 tim » 2010年 6月 8日, 20:30

SQL Server 2005 SP2 起, trigger 已支援 logon 的部分.

這代表著, 若是需要在登入時, 做一些限制來增加保護或是安全是很不錯的, 例如限制 sa 僅能由特定的 ip 來登入, 或是同一帳號不得登入多次等.

以下為一些範例:

限制特定帳號於特定ip登入: http://byronhu.spaces.live.com/Blog/cns ... 2238.entry

代碼: 選擇全部

CREATE TRIGGER [connection_limit_trigger]
ON ALL SERVER
WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN()= 'sa' AND
not exists  (SELECT * FROM sys.dm_exec_connections
            WHERE client_net_address = '192.168.1.10'
            and [email protected]@SPID)
    ROLLBACK;
END; 
利用 SQL Server Logon Triggers 限制資料庫連線條件: http://www.dotblogs.com.tw/hunterpo/arc ... 10622.aspx
以下為限制 'sa' 使用 ssms 工具來連線

代碼: 選擇全部

USE master;
GO

-- 建立登入觸發程序,以回應 LOGON 事件。
CREATE TRIGGER deny_remote_ssms_trigger
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN()= 'sa' AND 
	(
		SELECT COUNT(*) 
		FROM sys.dm_exec_sessions
		WHERE is_user_process = 1 
			AND original_login_name = 'sa' 
			AND and [email protected]@SPID
			AND [program_name] LIKE N'Microsoft SQL Server Management Studio%'	-- 只限制由 SSMS 連過來
	) > 0
    ROLLBACK;
END;
GO
利用 sys.dm_exec_connections 及 sys.dm_exec_sessions 來查詢所需要的欄位, 並配合 @@SPID 來檢查對應的 ip (client_net_address), 對應的程式 (program_name) 很方便的做登入限制.

而 create trigger 的參考資料可以參考這篇: http://msdn.microsoft.com/zh-tw/library/ms189799.aspx, 裡面也有提到有關 logon trigger 的範例.
多多留言, 整理文章, 把經驗累積下來.....

回覆文章