-- =================================================================================================================== -- SQLI-WIN-007: En tjeneste, der skal starte automatisk, kører ikke -- =================================================================================================================== -- Regel-id: SQLI-WIN-007 -- Titel: En tjeneste, der skal starte automatisk, kører ikke -- Alvor: Medium. -- Versioner: Windows Server 2008 R2 og nyere (DelayedAutoStart læses fra Windows Server 2012; før det uden). -- -- Hvad tjekkes, og hvorfor: -- En tjeneste med starttypen Automatisk står ikke som kørende. Det, tjenesten gør, sker ikke, og en automatisk -- tjeneste, der er stoppet, er oftest gået ned. SQLInsight starter aldrig selv tjenester. -- -- Vurdering (sker i C# ud fra de indsamlede data, ikke på den overvågede server): -- Et fund pr. tjeneste med StartMode = 'Auto' og State <> 'Running', som hverken står på den indbyggede liste, i -- Ignore, i serverens ignoreringsliste eller i serverens liste over overvågede tjenester. Ingen fund inden for -- StartupGraceMinutes efter LastBootUpTime. Viser serveren slet ingen tjenester, er området "ikke målbar" -- (manglende læseret på Service Control Manager). -- -- Grænseværdier (agentens appsettings.json og serverens indstillinger i SQLInsight Web): -- SQLInsight:Servers:Services:Ignore ekstra tjenester, der må være stoppet (navn eller præfiks*) -- SQLInsight:Servers:Services:StartupGraceMinutes standard 15 (ingen fund de første minutter efter en genstart) -- Indbygget liste over automatiske tjenester, der stopper af sig selv (StoppedAutomaticServiceRule.StopByDesign), -- fx sppsvc, gupdate, edgeupdate, MapsBroker, RemoteRegistry, clr_optimization_*, CDPUserSvc_*. -- Pr. server: "Tjenester der ignoreres" (insight.WindowsServers.IgnoredServices). Overvågede tjenester (SQLI-WIN-008) -- rapporteres dér og ikke her. -- -- Rettigheder på den overvågede server (db/permissions/grant-windows-server.ps1, aldrig lokal administrator): -- WMI Enable Account/Remote Enable på root\cimv2 + læseret (CC LC RP RC) på Service Control Manager -- (over netværket må ellers kun administratorer liste tjenester). -- WS-Man: Remote Management Users · DCOM: Distributed COM Users -- -- Data kommer fra (collector, fil – medlemmer, interval): -- src/SQLInsight.Servers/CimWindowsServerSource.cs – Session.GetServicesAsync (CimQueries.ServiceQuery, ellers -- CimQueries.ServiceQueryWithoutDelayed), hvert 5. minut (SQLInsight:Servers:Intervals:services) fra -- src/SQLInsight.Agent/Servers/ServerMonitor.cs – CollectServicesAsync. -- Regelkode: src/SQLInsight.Rules/Servers/WindowsServerRules.cs : StoppedAutomaticServiceRule -- -- Read-only: Ja. Reglen sender ingen SQL. Agenten læser kun fra Windows: CIM/WQL-forespørgsler (SELECT), -- hændelsesloggen og for planlagte opgaver Task Schedulers skrivebeskyttede GetInfo. Den starter, stopper -- eller ændrer intet på serveren. Filen indeholder kun kommentarer; forespørgslerne mod Windows står herunder. -- =================================================================================================================== -- Reglen bruger ikke SQL. Forespørgslerne mod Windows står herunder; filen indeholder kun kommentarer og ændrer intet. -- -- CIM/WQL (namespace root\cimv2): -- SELECT Name, DisplayName, State, StartMode, DelayedAutoStart, ExitCode FROM Win32_Service -- SELECT Name, DisplayName, State, StartMode, ExitCode FROM Win32_Service (før Windows Server 2012) -- -- Efterprøv med PowerShell (skrivebeskyttet; kør på agentens server som agentens konto): -- Get-CimInstance -ComputerName SERVER -Query "SELECT Name, DisplayName, State, StartMode, DelayedAutoStart, ExitCode FROM Win32_Service" | -- Where-Object { $_.StartMode -eq 'Auto' -and $_.State -ne 'Running' } | Select-Object Name, DisplayName, State, ExitCode