sqlinsight-pro/docs/regler.md
Claude 7f640e74e5
Some checks are pending
CI / Build og unit tests (push) Waiting to run
CI / Integration (mcr.microsoft.com/mssql/server:2017-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2019-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2022-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2025-latest) (push) Blocked by required conditions
Fase 4: community and local rules written as SQL
Rules can now be data: a JSON file with one read-only SELECT where every
row is a finding, with {column} templates, server or per-database scope,
minimum version, sensitive columns and references. Community rules live
in rules/community (reviewed via pull request), ship with every build
and with the signed rule pack; local rules are read from the agent's
data folder every five minutes. Queries are checked for anything that
could write, run with the least-privilege login, and a missing
permission makes the rule not measurable rather than failing. The
rule engine picks up catalog changes without a restart. Authors get
'rules validate' and 'rules test --instance'. Four example community
rules (sa active, orphaned database owners, default trace off,
untrusted foreign keys).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
2026-09-29 10:23:01 +00:00

5 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.