README: harden design principles from a DBA/DevOps review
Least-privilege permissions per version, collector overhead safeguards, separate repository instance, controlled/offline updates, container test matrix, and SQL Server 2016 marked as out of support. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
This commit is contained in:
parent
bb16f2272e
commit
9792b54480
1 changed files with 19 additions and 4 deletions
23
README.md
23
README.md
|
|
@ -137,12 +137,24 @@ Hvert **finding** indeholder:
|
|||
|
||||
### Designprincipper
|
||||
|
||||
- **Kun læseadgang til overvågede servere.** Agenten kræver `VIEW SERVER STATE` / `VIEW SERVER PERFORMANCE STATE` og ingen sysadmin-rettigheder. Den ændrer aldrig noget på serveren.
|
||||
- **Lav overhead.** Collectors er lette, bruger adaptive intervaller og har en indbygget grænse for, hvor meget de må belaste serveren.
|
||||
- **Least privilege, aldrig sysadmin.** Agenten ændrer aldrig noget på de overvågede servere. Rettighederne leveres som ét versionsafhængigt script:
|
||||
- `VIEW SERVER STATE`. På SQL Server 2022+ bruges de mere granulære `VIEW SERVER PERFORMANCE STATE` og `VIEW SERVER SECURITY STATE`.
|
||||
- `VIEW DATABASE STATE` i hver database, som Query Store-data skal læses fra.
|
||||
- Læseadgang til `msdb`, som giver backup-historik og SQL Agent-jobs.
|
||||
- Seneste gode CHECKDB læses med `DATABASEPROPERTYEX(..., 'LastGoodCheckDbTime')` og ikke med `DBCC DBINFO`, som kræver sysadmin.
|
||||
- Tjenesten kører som gMSA med Windows-autentificering. SQL-login understøttes kun, hvor det er nødvendigt.
|
||||
- **Lav overhead, målt og ikke antaget.**
|
||||
- Alle DMV-queries kører med `SET LOCK_TIMEOUT`, `SET DEADLOCK_PRIORITY LOW`, korte command timeouts og `READ UNCOMMITTED`.
|
||||
- Tunge kilder hentes i trin med en grænse for rækker og bytes. Det gælder især plan cache med showplan-XML og `sys.dm_db_index_physical_stats`, der altid bruges i `LIMITED`-mode.
|
||||
- Kumulative tællere som wait stats, file stats og query stats lagres som deltaer mellem snapshots. Tidspunktet for genstart af instansen gemmes, så en genstart ikke giver fejlagtige tal.
|
||||
- Deadlocks hentes fra den eksisterende `system_health`-session, før der oprettes egne Extended Events-sessioner.
|
||||
- **Repository på en separat instans.** Overvågningsdata bør ikke ligge på den instans, der overvåges. SQL Server Express kan bruges til små installationer, men har en grænse på 10 GB pr. database. Der er derfor en fast retention-politik og aggregering af ældre data.
|
||||
- **Krypterede forbindelser som standard.** Microsoft.Data.SqlClient bruger `Encrypt=True`. Installeren validerer certifikaterne, og `TrustServerCertificate` kræver et bevidst valg.
|
||||
- **Findings-sync er opt-in og gennemsigtig.** Kunden kan se præcis, hvad der sendes. Som standard sendes kun fund og metadata, ikke data fra tabellerne. Querytekst kan anonymiseres eller udelades. Forbindelsen er TLS-krypteret og autentificeret med kundens licensnøgle.
|
||||
- **Hub'en er aldrig en direkte databaseforbindelse.** Agenten taler med et HTTPS-API og aldrig direkte med PostgreSQL.
|
||||
- **Regler er data med tests.** Hver regel har unit tests med kendte input og forventede fund, så ekspertisen kan udbygges uden regressioner.
|
||||
- **Opdateringer er signerede.** Både binære filer og regelpakker er kodesignerede og verificeres, før de installeres.
|
||||
- **Opdateringer er signerede og kontrollerede.** Både binære filer og regelpakker er kodesignerede og verificeres, før de installeres. On-prem-kunder vælger selv mellem automatisk opdatering, opdatering efter godkendelse og offline-pakker til air-gapped miljøer. Hver opdatering af databaseskemaet kan rulles tilbage.
|
||||
- **Build- og CU-katalog er data.** Oversigten over SQL Server-builds, CU'er, support-livscyklus og kendte fejl ligger i regelpakken. Den kan derfor opdateres, uden at der skal frigives en ny version af selve værktøjet.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -151,6 +163,8 @@ Hvert **finding** indeholder:
|
|||
### Fase 0: Fundament
|
||||
- [ ] Solution-struktur (.NET 10 LTS): Agent, Rules, Web, Hub, fælles domænemodel
|
||||
- [ ] CI-pipeline (build, test, statisk analyse)
|
||||
- [ ] Integrationstests mod rigtige SQL Server-containere (2017, 2019, 2022 og 2025) med Testcontainers
|
||||
- [ ] Least-privilege-script til opsætning af rettigheder og en test, der verificerer det
|
||||
- [ ] Datamodel for findings (fælles kontrakt mellem Agent og Hub)
|
||||
- [ ] Bidragsguide, code of conduct og issue templates
|
||||
|
||||
|
|
@ -191,7 +205,8 @@ Hvert **finding** indeholder:
|
|||
|
||||
## Understøttede versioner (mål)
|
||||
|
||||
- SQL Server 2016 SP3 og nyere (2017, 2019, 2022, 2025)
|
||||
- SQL Server 2017, 2019, 2022 og 2025
|
||||
- SQL Server 2016 og ældre overvåges i begrænset omfang og markeres altid som et **kritisk fund**, fordi de ikke længere får sikkerhedsopdateringer. Extended support for 2016 sluttede i juli 2026.
|
||||
- Standard, Enterprise og Developer edition
|
||||
- Senere: Azure SQL Managed Instance og SQL Server på Linux
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue