# Rettigheder og rettighedsrevision SQLInsight Pro holder øje med, hvem der har **sysadmin** og de øvrige forhøjede serverrettigheder, og hvem der får eller mister dem. Det er typisk det første, en revisor spørger til. ## Hvad måles Hvert 15. minut læser agenten: - medlemmer af de faste serverroller `sysadmin`, `securityadmin`, `serveradmin`, `setupadmin`, `processadmin`, `diskadmin`, `dbcreator` og `bulkadmin`; - logins med `CONTROL SERVER`; - for hvert login: type (SQL-login, Windows-login, Windows-gruppe …) og om det er deaktiveret; - for SQL-logins: om de følger Windows' adgangskodepolitik (`CHECK_POLICY`) og udløb (`CHECK_EXPIRATION`), og om `sa` er aktiv; - om SQL Servers **default trace** er slået til. Det kræver kun den rettighed, agenten i forvejen har (`VIEW ANY DEFINITION`). Det virker fra SQL Server 2005. ### Windows-grupper foldes ud Har en Windows-gruppe (fx `KUNDE\SQL-Admins`) sysadmin, er det personerne i gruppen, der har den. Agenten spørger derfor Active Directory om gruppens medlemmer, også medlemmer af grupper i gruppen. Svaret gemmes en time (fejl i 10 minutter), og et opslag afbrydes efter 20 sekunder, så en langsom domænecontroller ikke forsinker overvågningen. Det kræver, at agenten kører på **Windows i domænet**. Standardkontoen (`NT SERVICE\SQLInsight Agent`) taler med AD som maskinens computerkonto, som normalt må læse gruppemedlemskaber. Kan en gruppe ikke foldes ud, står der **"kunne ikke foldes ud"** og årsagen ved gruppen (fx en lokal gruppe på SQL-serveren, en gruppe i et domæne uden tillid, eller timeout). Gruppens medlemmer tælles så ikke med, og antallet vises som "3+" i oversigten. Slå udfoldningen fra med: ```json "SQLInsight": { "Privileges": { "ExpandWindowsGroups": false } } ``` En agent på Linux folder ikke grupper ud. ## Ændringer, og hvem der lavede dem Hver måling sammenlignes med den forrige. **Den første måling efter installation er udgangspunktet**: eksisterende medlemmer meldes ikke som nye. - Direkte medlemmer (logins) sammenlignes på navn og rettighed. - Personer i Windows-grupper sammenlignes kun, når gruppen kunne foldes ud begge gange. En gruppe, AD ikke svarede for, ligner altså ikke, at alle har forladt den. **Hvem og hvornår** læses fra default trace (hændelse 108, "Audit Add Login to Server Role"). Det kræver, at agenten har rettigheden `ALTER TRACE`, som er et tilvalg i `db/permissions/grant-least-privilege.sql` (se kommentaren i scriptet). Uden den findes ændringen stadig, men "Ændret af" står som "ukendt" med årsagen. Bemærk: - SQL Server skriver default trace i buffere; en ændring lige før en måling får derfor ofte sin forfatter først ved næste måling, og ændringsloggen opdateres så. - Default trace gemmer kun de seneste hændelser (5 filer à 20 MB). På en travl server kan hændelsen være væk, hvis agenten har været stoppet længe. - Ændringer i AD-gruppers medlemmer står ikke i SQL Servers trace. De vises med "Active Directory" som kilde; hvem der ændrede gruppen, skal findes i domænecontrollerens sikkerhedslog. - `CONTROL SERVER` (GRANT) har ikke hændelse 108 og vises uden forfatter. ## Fund | Regel | Alvor | Hvornår | |---|---|---| | SQLI-SEC-001 Ny forhøjet rettighed | **Høj** for sysadmin, securityadmin og CONTROL SERVER; Middel for de øvrige roller | En konto eller person har fået rettigheden. Fundet er åbent i 7 dage og vises øverst på instanssiden og overblikket og sendes som notifikation. | | SQLI-SEC-002 For mange med sysadmin | Middel | Flere personer og konti med sysadmin end grænsen (standard 3). Tjenestekonti (`NT SERVICE\…`, `NT AUTHORITY\…`, `##…##`, konti der ender på `$`) og deaktiverede logins tælles ikke. | Grænsen sættes i agentens konfiguration: ```json "SQLInsight": { "Privileges": { "MaxSysadminAccounts": 3 } } ``` **Navne er følsomme.** Hvem der fik rettigheden, hvilken gruppe og hvem der ændrede den, er følsomme målinger: de vises lokalt, men sendes som `[udeladt]` til SQLInsight Hub og i integrations-API'et (medmindre kunden selv slår det til). Fundets titel og emne indeholder aldrig navne. ## I webbrugerfladen - **Instans → Rettigheder** (`/instanser/{navn}/rettigheder`): personer med sysadmin efter udfoldning, alle forhøjede rettigheder med gruppernes medlemmer, sa, SQL-logins uden adgangskodepolitik, default trace og ændringsloggen for 7, 30, 90 dage eller 1 år. - **Rettigheder** i menuen (`/rettigheder`): alle instanser i én tabel og en samlet ændringslog. - **Revisionsrapport (PDF)**: se [rapporter.md](rapporter.md).