sqlinsight-pro/CONTRIBUTING.md
Claude f8aa0c307b
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 0: solution structure, capability model, rule engine, least-privilege script
- .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
2026-09-29 05:40:49 +00:00

2.6 KiB

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 og, til integrationstests, Docker.

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.