Sql-Server-2016
使用擴展事件監視 SQL Server 加密
有沒有辦法通過擴展事件監控加密連接?我過去曾使用 sqlsni.TRACE 監控過 TLS 1.0、1.1 和 1.2 握手,但找不到與加密連接本身相同的內容。除非“encrypt=yes”沒有添加到連接字元串中,否則只有握手會被加密,沒有別的。
我可以使用 sys.dm_exec_connections 來擷取它,但這不是實時的,我必須非常頻繁地執行它(每分鐘或更短時間)才能找到我正在尋找的東西。
是的,這可以使用以下跟踪事件來完成,
**“**您可以從此擴展事件跟踪中找到有關實際協商的 TLS 協議和密碼的更多詳細資訊,但這需要 SQL Server 2016 SP1 或更高版本:”
CREATE EVENT SESSION [tls] ON SERVER ADD EVENT sqlsni.trace( WHERE ([sqlserver].[equal_i_sql_ansi_string]([function_name],'Ssl::Handshake') AND [sqlserver].[like_i_sql_unicode_string]([text],N'%TLS%'))) ADD TARGET package0.event_file(SET filename=N'tls_trace') WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE, TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF);
” Dan Guzman在這裡給出了 原始答案
另請注意,如果這需要在 2019 年完成,請將事件更改為
sqlsni.sni_trace
程式碼會像
CREATE EVENT SESSION [tls_new] ON SERVER ADD EVENT sqlsni.sni_trace( WHERE ([sqlserver].[equal_i_sql_ansi_string]([function_name],'Ssl::Handshake') AND [sqlserver].[like_i_sql_unicode_string]([text],N'%TLS%'))) ADD TARGET package0.event_file(SET filename=N'tls_trace') WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE, TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
編輯 在OP的評論之後,要求是找到連接是否加密而不是TLS。
我不知道擴展事件中的選項,但要實現這一點,您可以利用SQL Server 中的登錄觸發器。
sys.dm_exec_connections
以下是每次登錄後擷取的嘗試。DROP TABLE IF EXISTS test.dbo.tmp_conn SELECT * INTO test.dbo.tmp_conn FROM sys.dm_exec_connections dec WHERE 1=0 GO CREATE TRIGGER connection_encrypt ON ALL SERVER WITH EXECUTE AS N'sa' FOR LOGON AS BEGIN INSERT INTO test.dbo.tmp_conn SELECT * FROM sys.dm_exec_connections dec WHERE dec.session_id=@@spid END;
請根據您的審核需要更改程式碼。