我想知道是否有人知道查询 SQL Server 的“强制加密”是否设置为 true 的方法。
我知道我可以检查sys.dm_exec_connections当前连接是否已加密,但这并不能真正得到我想要的东西。false如果客户端请求加密,即使设置为“强制加密”,所有连接仍然可以加密。
我正在构建一个报告,扫描我们环境中的所有 SQL 服务器,以针对我们的最佳实践设置进行测试,以便我们可以修复错误配置的系统。由于报告将按计划运行,依赖sys.dm_exec_connections可能会给我一种错误的安全感,因为在报告运行时所有连接都可以加密,但五秒钟后某些连接未加密。我们的目标是尝试让所有 SQL 服务器强制加密,然后能够报告异常情况。
作为 David Browne 答案的替代方案,如果您的报告需要纯 T-SQL 解决方案,您可以从 SQL Server 的每个实例中的注册表中读取值:
DECLARE @ForceEncryption INT
EXEC xp_instance_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib', 'ForceEncryption', @ForceEncryption OUTPUT
SELECT CASE WHEN @ForceEncryption = 1 THEN 'Encryption Forced' ELSE 'Encryption Not Enforced' END
Run Code Online (Sandbox Code Playgroud)