sqlinsight-pro/docs/installation.md
Claude edb7410f76
Some checks are pending
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
CI / Build og unit tests (push) Waiting to run
Fase 2: Azure SQL Managed Instance, docs and rule catalog test
- Managed Instance reports 12.0.2000.8 but is evergreen: treated as the
  newest engine with all capabilities; new SelfManagedInfrastructure
  capability so backup, CHECKDB, files, tempdb, memory, patch level and
  lifecycle rules report 'handled by Azure' instead of false findings
- Microsoft Entra ID login (managed identity, service principal, default
  credential chain) via SqlConnection.AccessTokenCallback
- Least-privilege script recognizes Managed Instance; deadlock collector
  falls back to the ring buffer when event files cannot be read
- Web UI shows the right release for Managed Instance
- README and installation docs: notifications and Managed Instance
- Catalog test: 61 rules with unique, well-formed ids

Integration suite green on SQL Server 2017 and 2022.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
2026-09-29 08:23:40 +00:00

6.6 KiB

Installation

SQLInsight Pro består af to programmer, som begge installeres hos jer (on-prem):

Del Hvad den gør Kører som
SQLInsight Agent Overvåger SQL Server-instanserne og gemmer fund i repository-databasen Windows-tjeneste (eller systemd på Linux)
SQLInsight Web Lokalt websted, der viser fund, trends og anbefalinger IIS-websted eller selvstændig Windows-tjeneste med indbygget webserver (Kestrel)

Begge bruger en repository-database på en SQL Server 2016+-instans, der helst ikke er en af de overvågede.

Installationstrinene er skrevet ud fra Microsofts dokumentation for ASP.NET Core-hosting. De er endnu ikke gennemtestet på en ren Windows Server. Meld gerne afvigelser tilbage som issue.

1. Forudsætninger

  • Windows Server 2016 eller nyere (eller Linux til agenten)
  • .NET 10 Runtime på agent-serveren; ASP.NET Core Hosting Bundle på webserveren, hvis IIS bruges
  • To tjenestekonti, gerne gMSA: én til agenten og én til web-UI'et
  • Til SQL Server 2000: en Windows-agent med en ODBC-driver, der understøtter 2000 (se legacy-versions.md)

2. Repository-databasen

CREATE DATABASE SQLInsight;
GO
USE SQLInsight;
CREATE LOGIN [DOMÆNE\svc-sqlinsight-agent$] FROM WINDOWS;
CREATE USER [DOMÆNE\svc-sqlinsight-agent$];
ALTER ROLE db_owner ADD MEMBER [DOMÆNE\svc-sqlinsight-agent$];   -- agenten opretter og opgraderer skemaet

CREATE LOGIN [DOMÆNE\svc-sqlinsight-web$] FROM WINDOWS;
CREATE USER [DOMÆNE\svc-sqlinsight-web$];
ALTER ROLE db_datareader ADD MEMBER [DOMÆNE\svc-sqlinsight-web$]; -- web-UI'et læser kun

Agenten opretter tabellerne selv ved første start.

3. Rettigheder på de overvågede instanser

Kør db/permissions/grant-least-privilege.sql på hver instans efter at have oprettet agentens login. Agenten bliver aldrig sysadmin.

4. Agenten som Windows-tjeneste

dotnet publish src/SQLInsight.Agent -c Release -r win-x64 --self-contained false -o C:\Program Files\SQLInsight\Agent

Ret C:\Program Files\SQLInsight\Agent\appsettings.json: SQLInsight:Repository:ConnectionString og listen SQLInsight:Instances. Opret derefter tjenesten:

sc.exe create "SQLInsight Agent" binPath= "\"C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe\"" obj= "DOMÆNE\svc-sqlinsight-agent$" start= delayed-auto
sc.exe description "SQLInsight Agent" "Overvåger SQL Server og gemmer fund i SQLInsight-repositoriet."
sc.exe start "SQLInsight Agent"

For en gMSA angives ingen adgangskode. Loggen kan ses i Windows' Event Viewer under Application.

5a. Web-UI'et på IIS

  1. Installér ASP.NET Core Hosting Bundle for .NET 10, og kør iisreset.
  2. Publicér:
    dotnet publish src/SQLInsight.Web -c Release -o C:\inetpub\SQLInsight
    
    Publiceringen danner en web.config med ASP.NET Core Module (in-process).
  3. Opret en application pool med .NET CLR version = No Managed Code, og sæt dens identitet til DOMÆNE\svc-sqlinsight-web$.
  4. Opret et websted, der peger på C:\inetpub\SQLInsight, med en HTTPS-binding og et certifikat fra jeres interne CA.
  5. Under Authentication: slå Windows Authentication til og Anonymous Authentication fra.
  6. Ret appsettings.json: SQLInsight:Repository:ConnectionString (Integrated Security, så app pool-identiteten bruges), eventuelt SQLInsight:Web:AllowedGroups, fx ["DOMÆNE\\SQL-Admins"].

5b. Web-UI'et som selvstændig Windows-tjeneste (uden IIS)

Web-UI'et har sin egen webserver (Kestrel) og kan køre som tjeneste på en server uden IIS.

dotnet publish src/SQLInsight.Web -c Release -r win-x64 --self-contained false -o "C:\Program Files\SQLInsight\Web"

Tilføj et HTTPS-endpoint i appsettings.json med et certifikat fra maskinens certifikatlager:

"Kestrel": {
  "Endpoints": {
    "Https": {
      "Url": "https://*:8443",
      "Certificate": { "Subject": "sqlinsight.domæne.local", "Store": "My", "Location": "LocalMachine" }
    }
  }
}

Opret tjenesten og en SPN, så Kerberos-login virker:

sc.exe create "SQLInsight Web" binPath= "\"C:\Program Files\SQLInsight\Web\SQLInsight.Web.exe\"" obj= "DOMÆNE\svc-sqlinsight-web$" start= delayed-auto
setspn -S HTTP/sqlinsight.domæne.local DOMÆNE\svc-sqlinsight-web$
sc.exe start "SQLInsight Web"

Åbn porten i Windows Firewall for de brugere, der skal se UI'et.

Notifikationer

Agenten kan give besked om nye og løste fund, og når en instans ikke kan nås. Det sættes op under SQLInsight:Notifications i agentens appsettings.json:

Kanal Opsætning
E-mail Email:Enabled, Host, Port, Security (StartTls, SslOnConnect eller None), From, To, eventuelt UserName/Password
Microsoft Teams Opret i Teams et workflow "Post to a channel when a webhook request is received", og sæt URL'en i Teams:WebhookUrl
Webhook Webhook:Url og eventuelt Secret. Så har hver request headeren X-SQLInsight-Signature: sha256=<HMAC-SHA256 af body>

Hver kanal har sin egen MinSeverity (standard: High til e-mail og Teams, Medium til webhook). En instans, der ikke kan nås, meldes altid. Sæt WebUrl til adressen på SQLInsight Web, så beskederne linker direkte til fundet. MaxMessagesPerHour begrænser antallet af beskeder pr. kanal.

Azure SQL Managed Instance

Tilføj instansen som en almindelig instans. Log ind med Microsoft Entra ID:

{ "Name": "mi-prod", "Server": "mi-prod.abc123.database.windows.net", "Authentication": "EntraManagedIdentity" }

Mulighederne er EntraManagedIdentity (agentens managed identity; UserName kan være client id for en user-assigned identity), EntraServicePrincipal (UserName = client id, Password = secret, TenantId) og EntraDefault. Opret login'et med CREATE LOGIN [navn] FROM EXTERNAL PROVIDER, og kør derefter grant-least-privilege.sql.

På Managed Instance håndterer Azure backup, patching, filer, tempdb og hukommelse. De regler vises derfor som "Håndteres af Azure" og ikke som fund. MI-understøttelsen er bygget ud fra Microsofts dokumentation, men er endnu ikke testet mod en rigtig Managed Instance.

Linux (systemd)

Begge programmer understøtter systemd (Type=notify). Windows-login på Linux kræver en Kerberos keytab; se Microsofts dokumentation for Negotiate-autentificering på Linux.

Opdatering

Stop tjenesten (eller app poolen), kopiér de nye filer ind uden at overskrive appsettings.json, og start igen. Agenten opgraderer repository-skemaet selv.