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
- .NET 10 solution with Core, Connectivity, Rules, Contracts, Agent, Web and Hub - Capability model gating collectors and rules by SQL Server version (2000 and later); rules that cannot run are reported as not measurable, never as passed - Connectivity via Microsoft.Data.SqlClient with ODBC fallback for legacy instances, hardened monitoring session settings valid back to SQL Server 2000 - Support lifecycle rule (SQLI-VER-001) with lifecycle data shipped as a rule pack - Version-aware least-privilege permissions script, verified by integration tests against SQL Server in Docker (reads monitoring sources, cannot read customer data) - Forgejo Actions CI, contributing guide, code of conduct, issue templates, legacy version notes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
49 lines
2.6 KiB
Markdown
49 lines
2.6 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`.
|
|
|
|
## 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*.
|