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
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
53 lines
2.9 KiB
Markdown
53 lines
2.9 KiB
Markdown
# Bidrag til SQLInsight Pro
|
|
|
|
Tak fordi du vil hjælpe. De mest værdifulde bidrag er **SQL Server-ekspertise**: problemer du har set i produktion, hvordan de måles, og hvordan de løses. Opret dem som et issue med skabelonen *Forslag til regel*.
|
|
|
|
## Byg og test
|
|
|
|
Du skal bruge [.NET 10 SDK](https://dotnet.microsoft.com/download) og, til integrationstests, Docker.
|
|
|
|
```bash
|
|
dotnet build
|
|
dotnet test --filter "Category!=Integration" # unit tests, ingen afhængigheder
|
|
dotnet test tests/SQLInsight.IntegrationTests # starter SQL Server 2022 i Docker
|
|
SQLINSIGHT_MSSQL_IMAGE=mcr.microsoft.com/mssql/server:2019-latest \
|
|
dotnet test tests/SQLInsight.IntegrationTests # anden version
|
|
```
|
|
|
|
Warnings behandles som fejl, og .NET-analyzers kører på niveauet `latest-recommended`.
|
|
|
|
## Struktur
|
|
|
|
| Mappe | Indhold |
|
|
|---|---|
|
|
| `src/SQLInsight.Core` | Domænemodel: versioner, capabilities, findings |
|
|
| `src/SQLInsight.Connectivity` | Forbindelser (SqlClient + ODBC-fallback) og registrering af instansen |
|
|
| `src/SQLInsight.Rules` | Regelmotor og regler |
|
|
| `src/SQLInsight.Agent` | Windows Service / systemd-agent |
|
|
| `src/SQLInsight.Web` | On-prem web-UI (Fase 1) |
|
|
| `src/SQLInsight.Contracts` | Wire-kontrakt mellem agent og Hub |
|
|
| `src/SQLInsight.Hub` | Centralt API til findings, PostgreSQL (Fase 3) |
|
|
| `db/permissions` | Least-privilege-script til agentens login |
|
|
| `tests/` | Unit og integrationstests |
|
|
|
|
## Sådan skriver du en regel
|
|
|
|
1. Implementér `IRule` i `src/SQLInsight.Rules`. Giv den et nyt, fast id (`SQLI-<OMRÅDE>-<NR>`). Et id genbruges aldrig.
|
|
2. Angiv i `RequiredCapabilities` alt, hvad reglen kræver. Motoren rapporterer den som *ikke målbar* på versioner, der mangler noget. Reglen må aldrig selv returnere `Passed`, når den ikke har kunnet måle.
|
|
3. Et finding skal have **evidens** (de konkrete tal), **forklaring** (hvorfor det er et problem) og **anbefaling** (hvad man gør). Fix-scripts vises for brugeren og køres aldrig automatisk.
|
|
4. Skriv unit tests for alle udfald: fundet, ikke fundet, grænseværdier og versioner, hvor reglen ikke kan måles.
|
|
5. Registrér reglen i `BuiltInRules`.
|
|
|
|
### Uden C#: community-regler
|
|
|
|
Mange regler kan skrives som en SQL-forespørgsel i en JSON-fil under `rules/community/`. De kræver ingen C# og kan afprøves direkte mod en instans med `SQLInsight.Agent rules test`. Se [docs/regler.md](docs/regler.md).
|
|
|
|
## Queries mod overvågede servere
|
|
|
|
- De skal være **read-only** og kunne køre med rettighederne fra `db/permissions/grant-least-privilege.sql`. Kræver de mere, skal scriptet og `LeastPrivilegeTests` opdateres i samme ændring.
|
|
- De skal være billige: ingen `DETAILED`-scans, grænser på antal rækker og intet, der kan tage låse på brugerdata.
|
|
- Tjek, hvilke versioner DMV'en og kolonnerne findes i, og angiv det som capabilities.
|
|
|
|
## Commits
|
|
|
|
Små, fokuserede commits med en besked, der forklarer *hvorfor*.
|