Net-Base Magasin

22.05.2026

Udvikling af multi-tenant forretningssoftware: Arkitektur, datamodel og drift uden overraskelser

Multitenancy afgør skalerbarhed, driftsomkostninger og sikkerhed. Denne artikel viser, hvordan man planlægger multitenant virksomhedssoftware, så data holdes klart adskilt, adgangsrettigheder kan efterprøves, og opdateringer kan rulles ud uden nedetid.

22.05.2026

Den, der vil udvikle mandantunderstøttelse i Business-software, træffer tidlige arkitekturvalg, som senere kun vanskeligt kan „konfigureres væk“. Understøttelse af flere lejere er ikke kun et licens- eller UI-spørgsmål, men påvirker direkte datamodel, adgangsrettigheder, grænseflader, opdateringsprocesser, support og ikke mindst sikkerhedsdokumentation. I praksis mislykkes Multi-Tenant-projekter sjældent på den faglige logik, men på uklare adskillelseslinjer: Hvor præcist begynder en lejer? Hvordan isoleres data? Hvilke komponenter må arbejde på tværs af lejere (f.eks. monitoring, backup, e-mail-afsendelse) – og hvordan auditeres det?

Denne artikel henvender sig til IT-ledelse, administratorer og tekniske projektansvarlige. Den beskriver velafprøvede mønstre, typiske fejlagtige antagelser og konkrete beslutningsspørgsmål for drift og videreudvikling. Fokus er bevidst på konsekvenser i hverdagen: Provisionering af nye lejere, rolle- og rettighedsmodeller, datamigrering, drift af grænseflader, logging, backup/RESTore og opdateringsevne. Målet er en arkitektur, der er holdbar på længere sigt – uanset om løsningen drives som internt system, i flere koncernområder eller senere som en hostet platform.

Hvad understøttelse af flere lejere virkelig betyder i virksomhedskontext

Understøttelse af flere lejere (ofte også kaldet Multi-Tenancy) betyder, at en software afbilder flere organisatorisk adskilte enheder („lejere“) på en fælles teknisk platform. En lejer kan være en virksomhed, et datterselskab, et lokationssted, en kunde eller en forretningsenhed. Afgørende er: Lejere må ikke se eller påvirke data eller funktioner fra en anden lejer, medmindre det er eksplicit forudsat og kontrolleret (f.eks. koncernrapportering).

I projekter er det nyttigt at definere understøttelse af flere lejere langs tre akser:

  • Dataisolation: Hvordan sikres det, at data kun kan læses og skrives i den korrekte lejerkontekst?
  • Identitet & rettigheder: Hvordan tilknyttes en bruger en lejer, og hvordan valideres roller/scopes?
  • Driftsisolation: Hvor meget må lejere påvirke hinanden i belastning, fejl, opdateringer og vedligeholdelsesvinduer?

Disse akser fører til forskellige udformninger. En løsning kan eksempelvis adskille data strengt (separate databaser), men alligevel være stærkt koblet driftsmæssigt (fælles deployments, fælles kø, fælles søkeindekser). For beslutningstagere er det vigtigt at forstå, at understøttelse af flere lejere ikke er en „kontaktknap“, men et spektrum med omkostnings- og risikokonsekvenser.

Arkitekturvalg for mandantunderstøttende Business-software

Før I udvider tabeller eller gør brugerflader „mandantunderstøttende“, bør I afklare systemgrænserne: Hvilke komponenter hører til platformen, hvilke skal konfigureres per lejer, og hvilke data må analyseres centralt? I etablerede virksomhedsmiljøer er tilslutninger til ERP, DMS, CRM eller Identity Provider (IdP) desuden væsentlige.

Single-Tenant vs. Multi-Tenant: fagligt ens, teknisk meget forskellige

Single-Tenant betyder: per lejer en egen instans (mindst egen database, ofte også egen applikationsstack). Multi-Tenant betyder: flere lejere deler instanser og infrastruktur – med logisk adskillelse. Multi-Tenant reducerer ofte indsatsen til rollout og drift, men øger kravene til isolation, testdækning og observability (iagttagelighed gennem logning/metrikker/tracing).

En pragmatisk tilgang er ofte: „Multi-tenant i koden, single-tenant i driften“ for kritiske lejere. Det betyder: Koden håndterer lejerkontekster korrekt, men enkelte lejere kan valgfrit driftes separat (f.eks. af compliance- eller performance-grunde). Til det formål skal konfiguration, udrulning og overvågning dog fra begyndelsen være forberedt på begge varianter.

Lejerkontekst som et gennemgående arkitekturprincip

Mange fejl opstår, fordi lejerkonteksten kun bliver „tilføjet“ enkelte steder (f.eks. filtre i SQL, ekstra parametre i services). Det er mere robust, hvis lejerkonteksten bliver et gennemgående princip:

  • Hver anmodning har en entydigt fastlagt lejer (fra token/SSO, subdomæne, header, klientcertifikat eller en konfigureret endpoint).
  • Lejerkonteksten behandles i serverlogikken som obligatorisk information (ingen standardlejere, ingen „hvis tom, så…“).
  • Dataadgangslag og grænseflader håndhæver lejerfiltre eller lejerbinding i stedet for at gøre dem valgfrie.
  • Logging og audit indeholder lejer, bruger/servicekonto og korrelations-ID, så drift og support kan rekonstruere, hvad der er sket.

Denne „lejerkontekst først“-tilgang reducerer den klasse af fejl, som først bliver synlige i driften: forkerte rapporter, utilsigtet datablanding, vanskeligt forklarlige rettighedssituationer og ufuldstændige audit-trails.

Datamodel: Tre almindelige isolationsmønstre og deres konsekvenser

Den vigtigste tekniske beslutning for multi-tenant funktionalitet er dataopbevaringen. Den påvirker backup/RESTore, migration, performance og sikkerhedsrevisioner. I kernen findes tre mønstre, som også kan kombineres.

1) Database pr. lejer

Hver lejer har sin egen database (eller eget databasecluster). Fordele: meget klar isolation, enkel RESTore pr. lejer, godt grundlag for differentierede vedligeholdelsesvinduer. Ulemper: mere provisioning-arbejde, flere forbindelser, flere schema-migrationer og højere driftkompleksitet (f.eks. overvågning på tværs af mange databaser).

Typiske anvendelsestilfælde: meget strenge compliance-krav, lejere med stærkt varierende datamængder, eller tilfælde hvor lejere har brug for forskellige release-cyklusser. Administrativt relevant: I får brug for solid automatisering til Schema-opdateringer, Indeksstyring, Backups og rettigheder – ellers eksploderer indsatsen med antallet af lejere.

2) Schema pr. lejer

En databaseserver, men per lejer et eget schema (eller namespace). Det er en mellemform for isolation: bedre at adskille end rene række-filtre, men mindre tungt end komplette databaser. Backup/RESTore pr. lejer er afhængigt af databaseteknologi mulig, men ikke altid trivial. Migrationer er nemmere at koordinere end ved „DB pr. lejer“, dog forbliver antallet af objekter højt.

Vigtigt for driften: Undersøg tidligt, hvordan værktøjer til overvågning, backup og migration håndterer mange schemaer, og om standardrapportering og BI-adgang kan afbildes på tværs af schemaer uden at svække sikkerhedsrammen.

3) Fælles tabeller med Lejer-ID (række-baseret adskillelse)

Alle lejere deler tabeller; hver række har en Lejer-ID. Det er i mange brugstilfælde effektivt, reducerer antallet af objekter og forenkler globale migrationer. Samtidig øges ansvaret for applikationen og/eller databasen for pålideligt at håndhæve adskillelsen.

Hvis I anvender række-baseret adskillelse, bør I tage to punkter særligt alvorligt:

  • Teknisk håndhævelse: Stol ikke kun på „vi filtrerer alle steder efter Tenant-ID“. Brug, hvor muligt, database-mekanismer som Row-Level Security (RLS; database-side rækkefiltrering baseret på session-kontekst eller roller), Views eller Security-Policies. Hvilken mulighed der passer, afhænger af databasen.
  • Bivirkninger på tværs af tenants: Store tenants kan påvirke indekser, cache-hit-rates og locking-adfærd. Det er ikke et K.O.-kriterium, men skal indregnes i kapacitetsplanlægning og tests.

Hybridmodeller: ofte mere realistiske end „entweder/oder“

I praksis er hybridmodeller almindelige: kernetransaktioner i fælles tabeller (til simple opdateringer), særligt følsomme data i separate databaser eller Schemas, samt et centralt „Control Plane“-område til tenantadministration, fakturering, feature-flags og global konfiguration. Afgørende er, at disse grænser er dokumenterede og teknisk sikrede.

Adgangsrettigheder og identiteter: tenant, rolle, scope

Evnen til at håndtere flere tenants står og falder med et robust adgangskoncept. For driften er det mindre vigtigt, hvor elegant modellen er, end om den i praksis er efterprøvbar og diagnosticerbar: Hvorfor måtte bruger X udføre handling Y? Hvilken rolle greb ind? Hvilken policy afgjorde det?

SSO og tenant-tilknytning: SAML 2.0, OIDC og kataloger

I virksomhedsmiljøer bruges ofte Single Sign-on (SSO). SSO betyder, at login foregår via en central identitetsudbyder, og applikationen kun verificerer tokens/assertions. Almindeligt er SAML 2.0 (assertion-baseret, ofte i klassiske enterprise-opsætninger) eller OpenID Connect (OIDC; token-baseret, ofte i nyere IdP-stacks). Vigtigt er: Tenant-tilknytningen skal være entydig og manipulationssikker.

Velafprøvede muligheder:

  • Tenant via Issuer/IdP (én IdP per tenant) – meget klart, men organisatorisk mere krævende.
  • Tenant via Claim/Attribut (fx Tenant-ID i tokenet) – fleksibelt, kræver præcis validering og mapping.
  • Tenant via Subdomain eller adskilte Endpoints – godt til portaler, reducerer fejlbetjening, men skal spille pænt sammen med SSO-Redirects.

Rollemodel og tenant-administration uden „Support-Tickets“

En hyppig omkostningsdriver er, at enhver tenant-ændring (ny bruger, ny rolle, ny lokalitetstilknytning) ender som manuelt indgreb. Målet bør være: Tenants kan administrere deres brugere og roller inden for definerede rammer selv, uden at centrale admins skal røre hvert eneste detail.

I praksis er flerniveaue roller:

  • Plattform-Admin (driver miljøet, ser tenant-metadata, ikke nødvendigvis tenant-data).
  • Tenant-Admin (administrerer brugere, roller, konfiguration inden for tenant’en).
  • Fagroller (fx sagsbehandling, teamledelse, godkendelse).
  • Tekniske servicekonti (til interfaces, jobs, automatisering) med minimale rettigheder.

Operativ vigtigt: Roller bør være versionerbare og auditérbare. Hvis rettigheder kan ændres „lige sådan“ via direkte opdatering eller untracked konfiguration, mister I sporbarhed – og dermed tid ved revisioner og driftsforstyrrelser.

Grænseflader og integration: Multi-tenant-funktionalitet slutter ikke ved API-gatewayet

Mange digitale virksomhedsløsninger lever af integrationer: ERP, DMS, CRM, Data Warehouse, partnerportaler, maskinforbindelser. Multi-tenant-funktionalitet skal derfor også være konsekvent i grænseflader. Det angår REST-APIs (HTTP-baserede grænseflader), Eventing/Queues, filgrænseflader samt e-mail-/webhook-processer.

REST-API: Tenant-Scoping som kontrakt

For REST-APIs er det afgørende, hvordan tenant bestemmes i requesten. Almindelige mønstre er subdomain/host, en tenant-header eller et claim i access-tokenet. Vigtigt er, at det ikke forbliver en konvention, men dokumenteres og håndhæves server-side som et kontraktsmæssigt element af API’en.

For driften tæller det også: En API skal have klare fejlmeddelelser og logdata, der indeholder tenant, endpoint, bruger/klient, Request-ID og relevante parametre – uden at logge personoplysninger unødvendigt. På den måde kan administratorer og support reproducere sager uden at berøre andre tenants‘ data.

Asynkrone processer: Jobs, Queues og Scheduler skal planlægges med multi-tenant-support

Batch-jobs, imports, rapportgenerering eller natlige afstemninger kører ofte asynkront. Her opstår tenant-blanding særligt let, fordi en worker „i baggrunden“ arbejder uden aktiv brugerkontekst. Planlæg derfor:

  • Tenant-tilknytning per job: Hvert job bærer Tenant-ID og en „udløsende kontekst“ (bruger eller servicekonto).
  • Ressourcebegrænsninger: Store tenants må ikke fuldstændigt dominere jobbehandlingen (fairness, Quotas, prioriteter).
  • Tenantadskilte artefakter: Temporære filer, eksportfiler, S3-Buckets/Share-Pfade, e-mail-templates og webhook-secrets skal håndteres tenantspecifikt.

Drift og sikkerhed: Hvad administratorer senere reelt har brug for

Multi-tenant-funktionalitet fungerer i driften som en multiplikator: En fejl, en dårlig udrulning eller en uklar alarm kan påvirke mange tenants. Omvendt kan en veldrevet platform rulle opdateringer hurtigere og mere konsekvent ud. Det er afgørende, at drift og sikkerhed ikke bliver „eftermonteret“, men er en del af arkitekturdesignet.

Logning, audit og sporbarhed

For virksomhedssoftware bør man skelne to typer logs:

  • Teknisk logning: Fejl, performance, integrationsproblemer, Timeouts. Skal indeholde tenant og korrelations-ID, så man kan genfinde en transaktion i distribuerede komponenter.
  • Audit-logning: Hvem udførte hvilken faglige handling (f.eks. ændret stamdata, startet eksport, tildelt rettigheder)? Audit-logs er sikkerhedsrelevante og kræver klare koncepter for opbevaring og adgang.

Vigtigt: Audit er ikke „bare flere logs“. Audit skal være manipulationssikret, sporbar og analyserbar. Samtidig gælder dataminimering: Ikke alle detaljeinformationer skal gemmes permanent i audit, men kun de fakta, der er nødvendige til bevis og rekonstruktion.

Backup/Restore: Mulighed for selektiv gendannelse af tenants

Gendannelsesspørgsmålet er lakmustesten for dit datamodel. Et globalt backup kan hurtigt oprettes, men skaden opstår, når en enkelt lejer rapporterer datatab, og du kun kan gendanne „alt eller intet“. Afhængigt af isolationsmønsteret er forskellige strategier fornuftige:

  • DB pro Mandant: Gendannelse er mest entydig, men kræver orkestrering, hvis flere databaser skal tilbageføres konsistent (f.eks. database + søgeindeks + fillager).
  • Shared DB: Gendannelse pr. lejer er betydeligt mere kompleks. Her hjælper lejer-specifikke eksport-/snapshot-mekanismer, event-sourcing-tilgange eller yderligere beskyttelsesforanstaltninger (soft-deletes, versionering, frigivelsesprocesser).

For administratorer tæller en dokumenteret fremgangsmåde: Hvor lang tid tager en gendannelse? Hvilke systemer er involveret? Hvordan testes det, at lejeren kører „rigtigt“ igen (Smoke Tests, Integrationschecks)?

Patching und Update-Strategie: Schema-Migrationen ohne Stillstand

En central fordel ved platformtilgange er evnen til at rulle opdateringer ensartet ud. Det lykkes kun, hvis du planlægger schemamigrationer (ændringer i databasestrukturer) og applikationsopdateringer som en sammenhængende proces. God praksis er:

  • Vorwärtskompatible Deployments: Nye softwareversioner kan køre med gammelt schema (i kort tid), og/eller gammel software kan køre med nyt schema. Det reducerer nedetid.
  • Migrationen in kleinen Schritten: I stedet for „Big Bang“-omlægninger: tilføje nye kolonner, udfylde data gradvist (backfill), og først senere fjerne gamle strukturer.
  • Feature-Flags pro Mandant: Funktioner kan aktiveres for udvalgte lejere for at begrænse risiko og gøre udrulninger kontrollerbare.

For IT-ledelsen er det vigtigt: Evnen til at opdatere er en investering. Den sparer senere tid ved sikkerhedsopdateringer, skift af operativsystem, databaseopgraderinger og integrationsændringer — altså netop på de områder, der over år giver omkostninger.

Provisionierung und Mandanten-Lifecycle: vom Onboarding bis zur Deaktivierung

Lejersupport er først „færdig“, når lifecycle er tænkt helt igennem. I hverdagen tæller ikke kun nyoprettelser, men også ændringer: ekstra lokationer, nye Identity-udbydere, kontraktsskift, dataeksport og deaktiveringer.

Onboarding: Was automatisiert sein sollte

En velordnet onboarding-proces reducerer fejl og supportbyrde. Typiske elementer:

  • Opret lejer (Tenant-ID, navn, kontakt, status).
  • Indstil konfiguration (region, sprog, tidszone, e-mail-domæner, branding hvis relevant).
  • Konfigurer identity-tilknytning (SSO-metadata, certifikater, redirect-URL’er).
  • Oprette initiale roller og admin-brugere.
  • Provisionere tekniske ressourcer (database/schema, Storage, søgeindeks, Queues).
  • Aktivér overvågning og alarmering for lejeren.

Jo mere af dette der er reproducerbart automatiseret, desto færre „særtilfælde“ opstår. Det er ikke kun effektivitet, men risikoreduktion: manuelle trin er den hyppigste kilde til inkonsistente konfigurationer.

Datenexport und Offboarding: unterschätzt, aber sicherheitskritisch

Offboarding er et sikkerheds- og compliance-emne: Hvilke data skal kunne eksporteres (fx til overdragelse), hvilke data skal slettes eller anonymiseres, og hvordan dokumenteres det? Uanset konkret juridisk rådgivning gælder teknisk: I har brug for klare ansvarsfordelinger, definerede frister og en proces, der er reproducerbar.

Hvis data ligger i flere systemer (database, fillager, søgeindeks, logs, backups), skal offboarding tage disse lag i betragtning. Især backups er følsomme: Fuldstændig sletning fra historiske backups er ofte i praksis umulig. Derfor er et koncept, der gør dette gennemsigtigt (opbevaring, adgangsbeskyttelse, rotation) og samtidig beskytter lejerdata uden for de produktive systemer på en passende måde, endnu vigtigere.

Typiske fejlscenarier fra praksis – og hvordan I undgår dem

Lejeradskillelse fejler sjældent spektakulært, men gennem mange små designhuller. Følgende fejlscenarier møder man regelmæssigt i projekter:

  • Tenant-ID som „valgfri“: Enkelte Endpoints, Jobs eller Reports glemmer filteret. Løsning: teknisk håndhævelse (Policies/RLS), tests og konsekvente arkitekturregler.
  • Delt konfiguration uden versionering: Ændringer i rollemodellen eller i feature-switches kan ikke senere eftervises. Løsning: versionér konfigurationen, auditér ændringer.
  • Caches på tværs af lejere: Caching uden tenant-key fører til datalæk. Løsning: Cache-key skal altid være tenantspecifik, følsomme data caches kortere.
  • Support kan ikke afgrænse problemer: Manglende korrelation og lejerspecifikke metrikker. Løsning: korrelations-ID, lejer-tags i logs/metrikker, klare dashboards.
  • Migrationer tager for lang tid: Store tabelombygninger blokerer driften. Løsning: inkrementelle migrationer, baggrundsprocesser, planlagte tidsvinduer.

Disse punkter er mindre „udviklerdetaljer“ end driftsrealitet. Den, som håndterer dem tidligt, reducerer senere omkostninger til hotfixes, nødvinduer og uklare ansvarsforhold.

Udvikling af lejeradskilt forretningssoftware: Tjekliste til holdbare beslutninger

Når I i et projekt lægger linjerne, hjælper konkrete spørgsmål med at synliggøre arkitekturens og driftsevnen:

  • Hvilken isolation er nødvendig: teknisk (data), organisatorisk (adgang), operationelt (vedligeholdelsesvinduer/last)?
  • Hvordan identificeres lejeren entydigt (SSO-claim, subdomæne, separat Endpoint)?
  • Hvordan håndhæves isolation (databasemekanismer, central adgangs-lag, Policies)?
  • Hvordan ser RESTore-scenariet ud: per lejer, med hvilke afhængigheder, i hvilket tidsrum?
  • Hvordan håndteres opdateringer: Schema-Migration, rollback-strategi, Feature-Flags?
  • Hvilken observability findes: lejermetrikker, Audit, alarmhåndtering, Runbooks?
  • Hvordan drives integrationer med lejeradskillelse (Servicekonten, Secrets, Ratenlimits, Webhooks)?

Disse spørgsmål er bevidst formuleret fra et driftsperspektiv. Hvis I kan besvare dem, er I som regel også arkitektonisk på et stabilt spor.

Konklusion: Lejeradskillelse er et driftsløfte, ikke en UI-funktion

Evnen til multitenancy afgør, om en forretningssoftware kan drives økonomisk og videreudvikles sikkert over år. Kernarbejdet ligger i klare adskillelseslinjer: tenant-kontekst som et krav, robust dataisolation, efterprøvelige adgangsrettigheder, multitenant-kompatible grænseflader og en livscyklus, der omfatter provisionering, opdateringer og offboarding. Den, der etablerer disse grundlæggende forhold korrekt, vinder i hverdagen: færre forstyrrelser på grund af konfigurationsdrift, hurtigere opdateringer, klarere supportprocesser og pålidelige dokumentationer i forhold til interne og eksterne krav.

Hvis De ønsker at vurdere multitenancy for en eksisterende eller ny digital virksomheds­løsning konkret eller udarbejde et migrations- og arkitekturkoncept, så lad os gennemgå rammebetingelserne struktureret sammen:

I faglig sammenhæng spiller også Multi-Tenant-arkitektur og Tenant Isolation en vigtig rolle, når integrationer, dataflow og videreudvikling skal fungere sammen på en kontrolleret og ren måde.

Drøft et projekt eller moderniseringsinitiativ med Net-Base.

Del indlæg

Del dette indlæg direkte

LinkedIn, X, XING, Facebook, WhatsApp og e-mail er straks tilgængelige. Til Instagram forbereder vi link og kort tekst med det samme.

E-mail

Instagram åbner i en ny fane. Linket og kortteksten kopieres på forhånd til udklipsholderen.