# 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--`). 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*.