Pse*_*oad 4 encryption sql-server-2016
有没有办法通过扩展事件监控加密连接?我过去曾使用 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);
Run Code Online (Sandbox Code Playgroud)
另请注意,如果需要在 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)
Run Code Online (Sandbox Code Playgroud)
编辑 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;
Run Code Online (Sandbox Code Playgroud)
请根据您的审核需要更改代码。
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |