Habilitei o SSL com a Criptografia Forçada habilitada, usando um certificado autoassinado.
Em seguida, configurei o monitoramento automatizado para detectar conexões não seguras (parece redundante, eu sei, mas tenha paciência comigo aqui), usando a seguinte consulta T-SQL:
SELECT CONCAT('Not secured connection(s) detected of '
, ISNULL(QUOTENAME(COALESCE(ses.original_login_name, ses.nt_user_name, ses.login_name)), 'an unknown login')
, ' from ', ISNULL(QUOTENAME(client_net_address), 'an unknown address')
, ' ', QUOTENAME(ISNULL(ses.host_name, 'unknown host'), '(')
, ', ', ISNULL(QUOTENAME(ses.program_name), 'unknown program')
, ', to ', ISNULL(QUOTENAME(DB_NAME(ses.database_id)), 'an unknown database')
, ', Session(s): ', COUNT(ses.session_id)
), COUNT(con.connection_id) AS NumberOfConnections
FROM sys.dm_exec_connections AS con
LEFT JOIN sys.dm_exec_sessions AS ses
ON ses.session_id IN (con.session_id, con.most_recent_session_id)
WHERE encrypt_option = 'FALSE'
AND net_transport = 'TCP'
AND client_net_address NOT LIKE '<%'
GROUP BY COALESCE(ses.original_login_name, ses.nt_user_name, ses.login_name)
, client_net_address, ses.host_name, ses.program_name, ses.database_id
Mais tarde, comecei a receber alertas resultantes dessa consulta, com saída semelhante a esta:
Not secured connection(s) detected of an unknown login from [x.x.x.x] (unknown host), unknown program, to an unknown database: 0
( x.x.x.x
substitui os endereços IP reais que vieram de uma das redes de nossos clientes)
Isso significa que estamos detectando conexões TCP (em sys.dm_exec_connections
) sem sessões correspondentes (em sys.dm_exec_sessions
).
Com base no que encontrei na documentação da Microsoft, esses cenários podem acontecer como parte das arquiteturas de Grupo de Disponibilidade, Espelhamento de Banco de Dados ou Service Broker... Mas não estamos usando nenhum deles em nossa instância!
Isso não deveria estar acontecendo... Alguém tem alguma idéia de como explicar isso? Isso poderia acontecer devido a algum tipo de scanner de porta, talvez?
Obrigado!
Detalhes da versão:
Microsoft SQL Server 2019 [Enterprise] (RTM-CU4) (KB4548597) - 15.0.4033.1 (X64)
Mar 14 2020 16:10:35
Copyright (C) 2019 Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)
Presumirei que você reiniciou o SQL Server depois de habilitar a opção de criptografia forçada.
Além dos motivos mencionados em sua pergunta, você poderá ver uma conexão sem uma sessão associada se executar a consulta enquanto um cliente estiver no processo de conexão. O
encrypt_option
será exibidoFALSE
imediatamente após a conexão física ser estabelecida, mas mudará paraTRUE
após o cliente enviar uma mensagem TDSPRELOGIN
como parte do processo de handshake. A sessão será criada assim que o processo de login for concluído.Você pode filtrar o ruído de login em andamento em sua consulta de monitoramento usando uma junção interna em vez de uma junção externa
sys.dm_exec_sessions
ou adicionandoAND con.protocol_version > 0
.