Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
14 KiB
Opdateringer
SQLInsight Pro holder sig selv opdateret på to måder:
| Hvad | Indhold | Hvordan |
|---|---|---|
| Regelpakken | Microsofts supportdatoer og seneste CU/sikkerhedsopdatering pr. SQL Server-version | Hentes og tages i brug automatisk, uden genstart. Det er data, ikke kode. |
| Programmet | Agent og webbrugerflade | Tilstanden Off, Notify eller Automatic. Installeres af en privilegeret opdateringsopgave med backup og automatisk tilbagerulning. |
Begge kommer fra et opdateringsfeed: en https-adresse eller en mappe/et fildrev. Feedet behøver ikke at være betroet. Alt i det er signeret af SEOSoft (ECDSA P-256), og hver fil er låst af sin SHA-256 i det signerede manifest.
Ændringer ved opgradering
Læs dette, før en ny version installeres. Repository-skemaet opgraderes af agenten ved første start.
1.5.2: Axapta 3.0-batchstatus rettet
- Batchjobbenes
STATUSi Axapta 3.0 tolkes nu som i AX 4.0 og senere: 0 Tilbageholdt, 1 Venter, 2 Udfører, 3 Fejl, 4 Afsluttet (kontrolleret mod en kundes data). Før 1.5.2 blev afsluttede job vist som tilbageholdte og ventende som kørende, så batchfund og -sider for AX 3.0 var forkerte. Fund fra den gamle tolkning lukkes ved næste måling. - SQLI-AX-003 melder ikke længere ventende job, der var planlagt for mere end
SQLInsight:DynamicsAx:BatchAbandonedDays(30) dage siden: de er opgivne rækker, ikke en aktuel fejl. - Ingen skemaændringer.
1.5: Windows-servere og syntetiske tjek
- Ny menu – Servere: Windows-servere (CPU, hukommelse, diske med prognose for, hvornår de er fulde, tjenester, hændelseslog og planlagte opgaver) og Syntetiske tjek (TCP-port, HTTP(S) med certifikatets udløb, SQL-login og forespørgsel, DNS og Dynamics AX-logon), og det samme i API v1 under
/api/v1/windows-servers,/api/v1/synthetic-checksog/api/v1/server-findings(ændringer kræver scopeconfig:write, som i 1.3). Nye reglerSQLI-WIN-001…SQLI-WIN-013ogSQLI-SYN-001…SQLI-SYN-003. Se windows-servere.md og syntetiske-tjek.md. - SQL Server-hosts kommer med af sig selv som Windows-servere med rollen SQL Server (slås fra med
SQLInsight:Servers:IncludeSqlHosts). Uden de nye rettigheder er deres områder blot ikke målbare med årsagen; SQL Server-overvågningen er uændret. - Nye rettigheder pr. server: agentens konto skal have læseadgang på hver Windows-server, der skal overvåges. Den gives med db/permissions/grant-windows-server.ps1, som webbrugerfladen viser udfyldt med agentens konto under serveren. Aldrig lokal administrator og aldrig ret til at køre kode: Performance Monitor Users, Event Log Readers, Distributed COM Users, WMI Enable Account + Remote Enable på
root\cimv2ogroot\Microsoft\Windows\TaskScheduler, læseret på Service Control Manager og, kun med-WinRM, læseret i WinRM. Scriptet ændrer sikkerheden på kundens server: afprøv det først på en server, der ikke er i produktion, og kør det med-WhatIffor at se planen. Det gemmer de oprindelige indstillinger, før det ændrer noget, og-Removefjerner præcis det, det selv har givet. SQLInsight kører aldrig selv scriptet. - Firewall fra agentens server til de overvågede servere: TCP 135 og dynamiske RPC-porte (WMI over DCOM og hændelsesloggen) og, med
-WinRM, TCP 5985.grant-windows-server.ps1 -EnableFirewall -AgentAddress <agentens IP>opretter regler kun for agentens adresse; Windows' egne regler røres ikke. Syntetiske tjek bruger de porte, de tjekker (fx 2712, 443, 1433, 53). - Kun læsning: agenten læser med CIM-forespørgsler, hændelsesloggen og Task Schedulers skrivebeskyttede
GetInfoByName; den starter, stopper eller ændrer intet på serverne. Et syntetisk SQL-tjek kører én skrivebeskyttetSELECTi en transaktion, der altid rulles tilbage (fra 1.5 tjekkes også egne regler og community-regler strengere: ingen ekstra sætninger uden semikolon, sekvenser eller låse-hints). - Ikke med endnu: fund på servere og syntetiske tjek sendes ikke til SQLInsight Hub og indgår ikke i PDF-rapporterne. De vises i webbrugerfladen, i API v1 og som notifikationer.
- Repository: migration 0018 (Windows-servere, målinger, hændelser, syntetiske tjek og deres fund) køres af agenten ved første start; data ryddes op efter
SQLInsight:ServersogSQLInsight:SyntheticChecks(se windows-servere.md).
1.4: Dynamics AX
- Ny menu – Dynamics AX: vises, så snart en overvåget database er genkendt som Dynamics AX, med siderne AX-databaser, Batchjob, Nummerserier, RecId og AX-brugere bag blokering, og de samme data i API v1 under
/api/v1/dynamics-ax/…(scoperead). Nye reglerSQLI-AX-001…SQLI-AX-010. Se dynamics-ax.md. - Ny, valgfri læseadgang: batchjob, nummerserier og RecId kræver
SELECTpå nogle få af AX' egne systemtabeller (aldrig kundedata, aldrig mere endSELECT). Den gives pr. AX-database med db/permissions/grant-dynamics-ax-read.sql (og fjernes igen medrevoke-dynamics-ax-read.sql); den nøjagtige GRANT står under Dynamics AX → AX-databaser. SQLInsight kører aldrig selv scriptet. - Uden den GRANT ændres intet: agenten læser ingen AX-tabeller, de nye AX-regler er ikke målbare med den GRANT, der skal til, og alt andet virker som i 1.3. Genkendelsen af AX og AX-brugere bag blokering bruger kun de rettigheder,
grant-least-privilege.sqlallerede giver. Læsningerne er altidSELECTmedTOP, med 2 sekunders lock timeout (eller snapshot), aldrigNOLOCK, og kun i databaser, der er genkendt som AX og valgt til overvågning. - AX-fund til SQLInsight Hub følger stadig tilvalget pr. database fra 1.3 (standard fra) og gælder nu også
SQLI-AX-…. - Axapta 3.0/4.0 og tidszone: de lokale batchtider omregnes med AOS'ens tidszone. Kører agenten i en anden tidszone end AOS'en, så sæt
SQLInsight:DynamicsAx:LocalTimeZone(fxRomance Standard Time). - AX-versioner: kun Axapta 3.0 er verificeret mod en kundes database. AX 4.0, AX 2009, AX 2012 og Dynamics 365 F&O er bygget efter Microsofts dokumenterede skema og ikke verificeret mod kundedata – mangler en tabel eller kolonne, er tjekket ikke målbart med det præcise navn i stedet for at fejle.
- Repository: migration 0017 (tabellerne
insight.AxBatchRunsoginsight.AxSequenceSamples) køres af agenten ved første start; de ryddes op efterEventDaysogHourlyDayssom de øvrige data.
1.3: Servere og databaser
- Ændret adfærd – Dynamics AX-fund og SQLInsight Hub: fra 1.3 sendes AX-fund (regler
COM-AX-…) og AX-reglernes resultater kun til SQLInsight Hub for de databaser, hvor AX-fund til SQLInsight Hub er slået til under Overvågning → Servere og databaser. Standard er fra for alle databaser, også efter opgraderingen. Har I delt AX-fund med hubben i 1.2, stopper det altså ved opgraderingen, indtil I slår det til for hver AX-database. Andre fund sendes som før. Se servere-og-databaser.md og databehandling.md. - Servere i konfigurationsfilen virker som før: servere under
SQLInsight:Instances(fxMONITOR_SERVERfra installeren) spejles ind som fra konfigurationsfil, og alle deres databaser overvåges, også nye, præcis som i 1.2. Intet indsamlet data går tabt. Nye servere kan nu tilføjes i webbrugerfladen. - Hvem må ændre opsætningen:
SQLInsight:Web:AdminGroups(ellerADMIN_GROUPSi MSI'en). Er den tom, må den lokale gruppe Administratorer på webserveren. Se servere-og-databaser.md. - Overblik og alarmer: servere på pause vises som Sat på pause og tæller ikke med i tal og alarmer; fjernede servere vises ikke længere i overblikket, men deres historik bevares til rapporterne. Prometheus får
sqlinsight_instance_paused. - API v1: nye endpoints under
/api/v1/monitored-instances,/api/v1/instance-discoveryog/api/v1/agent-requestsog det nye scopeconfig:write.
Opsætning
I agentens appsettings.json:
"SQLInsight": {
"Updates": {
"Feed": "https://hub.example.com/updates/",
"Channel": "stable",
"RulePacks": true,
"Application": "Notify",
"CheckInterval": "06:00:00",
"MaintenanceWindow": "02:00-05:00"
}
}
| Indstilling | Betydning |
|---|---|
Feed |
https-adresse, lokal mappe eller UNC-sti (\\filserver\sqlinsight-feed). Tom: ingen opdateringstjek. |
Channel |
stable (anbefalet i produktion) eller preview (nye regler og funktioner før alle andre). |
RulePacks |
Hent nyere regelpakker automatisk. Standard: til. |
Application |
Off: aldrig. Notify: vis i webbrugerfladen, at en ny version findes; en administrator installerer. Automatic: agenten henter og verificerer; opdateringsopgaven installerer i vedligeholdelsesvinduet. |
MaintenanceWindow |
Lokal tid for automatisk installation, fx 02:00-05:00. Tom: når som helst. |
Components |
Hvad der opdateres. Standard: agenten selv. Se Web på samme server. |
DataDirectory |
Agentens datamappe. Standard %ProgramData%\SQLInsight eller /var/lib/sqlinsight. |
Status for opdateringer, regelpakke og licens ses under System i webbrugerfladen.
Installation af en ny version
Manuelt (Notify)
Som administrator på agentens server:
& "C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe" update check
& "C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe" update apply
Er SQLInsight Pro installeret med MSI'en, henter agenten den nye MSI, og opgaven installerer den med Windows Installer. Windows Installer stopper og starter tjenesterne og ruller selv tilbage ved fejl. Så passer MSI'ens viden om versionen altid, og en senere reparation eller opgradering kan ikke lægge ældre filer tilbage.
update apply henter pakken, verificerer den, stopper tjenesten, tager backup, kopierer de nye filer ind (uden at røre appsettings*.json og web.config), starter tjenesten og holder øje med den i et minut. Stopper den, rulles der automatisk tilbage.
Automatisk (Automatic)
Agenten kører som en konto med få rettigheder og kan ikke selv udskifte programfiler. Det gør en planlagt opgave, der kører som SYSTEM/root, og som selv verificerer signatur og hash igen, før noget installeres.
Windows:
schtasks /Create /TN "SQLInsight Update" /SC HOURLY /RU SYSTEM /RL HIGHEST `
/TR "\"C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe\" apply-update"
Linux (/etc/systemd/system/sqlinsight-update.service og .timer):
[Unit]
Description=SQLInsight Pro: installér hentede opdateringer
[Service]
Type=oneshot
ExecStart=/opt/sqlinsight/agent/SQLInsight.Agent apply-update
[Unit]
Description=SQLInsight Pro: kig efter hentede opdateringer hver time
[Timer]
OnCalendar=hourly
RandomizedDelaySec=10m
[Install]
WantedBy=timers.target
sudo systemctl enable --now sqlinsight-update.timer
Agentens systemd-enhed skal have StateDirectory=sqlinsight, så den kan skrive i /var/lib/sqlinsight.
Web på samme server
Skal webbrugerfladen opdateres sammen med agenten, angives begge komponenter:
"Components": [
{ "Name": "Agent", "Path": "C:\\Program Files\\SQLInsight\\Agent", "Service": "SQLInsight Agent" },
{ "Name": "Web", "Path": "C:\\Program Files\\SQLInsight\\Web", "Service": "SQLInsight Web" }
]
Kører web i IIS, angives "AppOffline": true i stedet for Service. Så lægges app_offline.htm i mappen, mens filerne udskiftes.
Uden internetadgang
Feed kan pege på en mappe eller et fildrev. Kopiér feed-mappen fra SEOSoft (eller fra en server med internetadgang) derhen. Signaturen kontrolleres på samme måde. Et manifest udløber efter 90 dage, så et gammelt feed ikke kan genbruges i det uendelige. Hent et nyt, inden det udløber.
Sikkerhed
- Kun manifester signeret med en nøgle i
trusted-keys.json(indbygget) ellerSQLInsight:Updates:TrustedKeysaccepteres. - Hver fil (regelpakke og programpakke) er låst af størrelse og SHA-256 i manifestet. En ændret fil bliver aldrig brugt.
- Ingen nedgradering. Et manifest, der er ældre end et allerede set, afvises, og en version, der ikke er nyere end den installerede, installeres ikke.
- Opdateringsopgaven stoler ikke på agentens datamappe. Den kopierer pakken til sin egen mappe (
.sqlinsight-updateved siden af installationen, kun skrivbar for administratorer), verificerer den der og installerer derfra. - Den gemte regelpakke verificeres igen ved hver start. Fejler den, bruges den indbyggede.
- Den seneste backup ligger i
.sqlinsight-update\work\backupindtil næste opdatering. Log:.sqlinsight-update\update.log.
For SEOSoft: udgiv en opdatering
# Regelpakke ud fra katalogfilerne i src/SQLInsight.Rules/Lifecycle
dotnet run --project tools/SQLInsight.LicenseTool -- rulepack --version 2026.10.14 --out rulepack-2026.10.14.json
# MSI til installationer lavet med MSI'en (bygges på Linux)
installer/build-msi.sh 1.5.2
# Programpakker: én zip pr. platform med mapperne Agent/ og Web/
# Samme opsætning som MSI'en (indbygget .NET), så en opdatering ikke kræver en runtime på serveren
dotnet publish src/SQLInsight.Agent -c Release -r win-x64 --self-contained true -p:Version=1.5.2 -o pkg/win-x64/Agent
dotnet publish src/SQLInsight.Web -c Release -r win-x64 --self-contained true -p:Version=1.5.2 -o pkg/win-x64/Web
# Signér kanalens manifest (det, der ikke angives, overtages fra det eksisterende manifest)
dotnet run --project tools/SQLInsight.LicenseTool -- publish --key sqlinsight-k20260929.private.pem --kid k20260929 \
--feed feed --channel stable --rulepack rulepack-2026.10.14.json \
--release 1.5.2 --asset win-x64=sqlinsight-1.5.2-win-x64.zip --asset win-x64-msi=dist/SQLInsight-Pro-1.5.2-x64.msi \
--asset linux-x64=sqlinsight-1.5.2-linux-x64.zip \
--notes https://git.seosoft.dk/seo/sqlinsight-pro/releases
Udgiv først på preview, og flyt til stable, når versionen har kørt et stykke tid. Feed-mappen kan serveres af SQLInsight Hub (SQLInsight:Hub:UpdateFeedPath, adressen bliver https://hub…/updates/) eller af enhver webserver.