- Long operations: a one-minute collector reads operations with progress from sys.dm_exec_requests (BACKUP, RESTORE, DBCC, REORGANIZE, SHRINK, ROLLBACK): command, database, start, percent, expected end, login. Stored in insight.LongOperations (migration 0011, RawDays), shown on the instance page, in the time window analysis and its PDF. The last 10 durations per command and database survive restarts; SQLI-OPS-001 flags a backup/restore running over twice the median. - Full-text community rules COM-FT-001..005 (metadata only, 2005 syntax): disk-full or paused/throttled catalogs, stale manual/off change tracking indexes and disabled indexes. - Statement activity (CPU time / time in plan cache): column in top SQL and SQLI-CPU-002 when above SQLInsight:TopSql:ActivityThresholdPercent (default 50) for at least an hour. Never clears the plan cache. - BuiltInCollectors.Create takes a CollectorSettings record. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
5.7 KiB
Egne regler og community-regler
De indbyggede regler er skrevet i C#. Derudover kan regler skrives som data: en skrivebeskyttet SQL-forespørgsel, hvor hver række, den returnerer, bliver til et fund. Det kræver ingen programmering og ingen ny version af SQLInsight Pro.
| Community-regler | Lokale regler | |
|---|---|---|
| Id | COM-OMRÅDE-123 |
LOCAL-OMRÅDE-123 |
| Hvor | rules/community/ i repositoriet |
rules-mappen i agentens datamappe (%ProgramData%\SQLInsight\rules eller /var/lib/sqlinsight/rules) |
| Hvem | Alle, via pull request. Reviewes før de kommer med | Kunden selv, fx interne standarder |
| Levering | Følger med hver version og med den signerede regelpakke | Læses af agenten hvert 5. minut |
Fundene vises, sendes (notifikationer, Hub, API) og indgår i rapporter som alle andre fund. Forklaringen afsluttes med "(Community-regel af …)" eller "(Lokal regel.)", så det er tydeligt, hvor reglen kommer fra.
Format
Én regel eller en liste af regler pr. .json-fil. Kommentarer (//) og afsluttende kommaer er tilladt.
{
"id": "LOCAL-SEC-001",
"title": "Login'et sa er aktivt",
"severity": "Medium",
"scope": "Server",
"minimumVersion": "10.0",
"query": "SELECT name AS [login] FROM sys.sql_logins WHERE principal_id = 1 AND is_disabled = 0",
"subject": "login: {login}",
"findingTitle": "Det indbyggede login '{login}' er aktivt",
"explanation": "sa er det login, angribere prøver først …",
"recommendation": "Deaktivér sa: ALTER LOGIN [sa] DISABLE …",
"evidence": [ "login" ],
"sensitiveColumns": [ "login" ],
"references": [ { "title": "Choose an authentication mode", "url": "https://learn.microsoft.com/…" } ],
"author": "Dit navn"
}
| Felt | |
|---|---|
id |
COM- eller LOCAL-, et område på 2–10 store bogstaver og tre cifre |
title |
Reglens navn, som det vises i reglistingen |
severity |
Info, Low, Medium, High eller Critical |
scope |
Server (køres én gang i master) eller Database (køres i hver online brugerdatabase; kolonnen database tilføjes automatisk) |
minimumVersion |
Ældste SQL Server-version, forespørgslen virker på: 9.0 = 2005 (standard), 10.0 = 2008, 11.0 = 2012, 13.0 = 2016, 14.0 = 2017, 15.0 = 2019, 16.0 = 2022. På ældre versioner er reglen "ikke målbar" |
query |
Én SELECT (eller WITH … SELECT). Hver række er et fund. Højst 100 rækker pr. regel |
subject |
Hvad fundet handler om. Bruges til at genkende det samme fund fra gang til gang. Standard: første kolonnes værdi |
findingTitle, explanation, recommendation |
Teksterne. {kolonne} erstattes med rækkens værdi |
evidence |
Kolonner, der vises som målinger. Standard: alle |
sensitiveColumns |
Kolonner med kundedata (logins, værtsnavne, forespørgselstekst). De sendes ikke til Hub, medmindre kunden har slået det til, og vises som [udeladt] i API'et |
references, author |
Valgfri |
Sikkerhed
Forespørgslen skal være én SELECT og må ikke indeholde fx INSERT, UPDATE, DELETE, EXEC, INTO, DROP, ALTER, DBCC, OPENROWSET, WAITFOR eller sp_/xp_-procedurer. Det er et ekstra værn. Det egentlige værn er, at agentens login kun har læserettigheder (db/permissions/grant-least-privilege.sql). Mangler login'et en rettighed, som reglen kræver, vises reglen som "ikke målbar" med SQL Servers fejlbesked. En forespørgsel med fejl vises som "fejl" og påvirker ikke de andre regler.
Hold forespørgslerne lette: de køres hvert 15. minut på hver instans (og i hver database for Database-regler) med en timeout på 30 sekunder.
Afprøv en regel
# Kontrollér format og forespørgsel, uden at forbinde
& "C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe" rules validate C:\regler\sa.json
# Kør den mod en instans fra appsettings.json, med agentens rettigheder, og se fundene
& "C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe" rules test C:\regler\sa.json --instance prod-sql01
Når reglen virker, kopieres filen til rules-mappen i agentens datamappe. Den tages i brug inden for 5 minutter. En regel slås fra med SQLInsight:CustomRules:Disabled (liste af id'er). Community-reglerne kan slås helt fra med SQLInsight:CustomRules:Community: false.
Bidrag med en community-regel
- Læg reglen i en fil under
rules/community/(en fil pr. område, fxsecurity.json). Id'et erCOM-OMRÅDE-nnn; tag næste ledige nummer. - Afprøv den med
rules testmod de versioner,minimumVersionlover. Nævn i pull requesten, hvilke versioner du har testet på. - Skriv forklaringen til en driftsansvarlig, der ikke er DBA: hvorfor er det et problem, hvad sker der, hvis man lader være, og hvad gør man konkret.
- Opret en pull request på git.seosoft.dk/seo/sqlinsight-pro. Testen
Community_rules_in_the_repository_are_valid_and_ship_with_the_buildfanger format- og sikkerhedsfejl.
Efter review kommer reglen med i næste version og i næste regelpakke, så eksisterende installationer får den uden opdatering af programmet.
Community-regler i pakken
| Fil | Regler |
|---|---|
dynamics-ax.json |
COM-AX-*: Dynamics AX-specifikke tjek (version, MAXDOP, …) |
integrity.json, security.json |
Integritet og sikkerhed |
fulltext.json |
COM-FT-001 katalog stoppet pga. fuld disk (Høj), COM-FT-002 katalog på pause eller droslet (Middel), COM-FT-003/004 fulltext-indeks med manuel eller slået-fra change tracking, ikke opdateret i 7/30 dage (Lav/Middel), COM-FT-005 deaktiveret fulltext-indeks (Middel). Kun metadata (sys.fulltext_catalogs, sys.fulltext_indexes, FULLTEXTCATALOGPROPERTY); SQL Server 2005-syntaks. |