sqlinsight-pro/docs/regler.md
Søren Eggert Lundsteen Olsen 384e1f154f Long operations, full-text rules and statement activity
- 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>
2026-10-02 09:07:29 +02:00

5.7 KiB
Raw Blame History

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

  1. Læg reglen i en fil under rules/community/ (en fil pr. område, fx security.json). Id'et er COM-OMRÅDE-nnn; tag næste ledige nummer.
  2. Afprøv den med rules test mod de versioner, minimumVersion lover. Nævn i pull requesten, hvilke versioner du har testet på.
  3. 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.
  4. Opret en pull request på git.seosoft.dk/seo/sqlinsight-pro. Testen Community_rules_in_the_repository_are_valid_and_ship_with_the_build fanger 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.