Szeparáció
A határ, amelyet az adatbázis tart, nem a kód
Minden CRM azt állítja magáról, hogy több bérlős. Az állítás olcsó; az számít, melyik réteg tartja a vonalat. Ha a válasz az, hogy „az alkalmazásunk mindig hozzáadja a megfelelő szűrőt”, akkor a garancia csak annyit ér, mint a legkevésbé kipihent fejlesztő, aki valaha írt egy lekérdezést.
Az iKonekt az első migrációjától kezdve több bérlős volt, nem utólag építették bele – ami dicsekvésnek hangzik, valójában pedig vallomás: utólag meggyőzően megcsinálni szinte lehetetlen, és mindenkinek, aki megpróbálta, van egy története róla.
Az elkülönítés az adatbázisban él. A huszonhat tábla mindegyike tartalmazza a hozzá tartozó bérlőt, és az ezt ellenőrző szabály minden olvasáskor és íráskor fut, teljesen az alkalmazás alatt. Egy lekérdezés, amely elfelejti a határt, nem más cég ügyfeleit adja vissza. Semmit nem ad vissza.
Sorszintű biztonság, kikényszerítve
Nem konvenció, nem kódellenőrzési szabály. Az adatbázis megtagadja. Hetvenkét szabály, egyenként megírva, nem generálva – mert a generált szabályt senki sem olvasta el.
Összetett kulcsok
Egy gyermekrekord a bérlőjére és a szülőjére együtt hivatkozik, párosban. Egy rossz cégtől származó kóbor azonosító nem oldódik fel – egyszerűen nem érvényes hivatkozás.
Soha nincs alapértelmezett bérlő
Egy hatókör nélküli kérés nem csendben a nulla bérlőre vonatkozó kéréssé válik. Mielőtt elérné az adatbázist, hibát dob. Nincs „hatókör nélküli” mód, amelyet elfelejthetne kikapcsolni.
A hiba, amely nem tudta magát bejelenteni
Amíg a több bérlős működésen dolgoztunk, a hibák többsége hangos volt. Adjon két cégnek ugyanazt az ügyféltartományt, és az adatbázis azonnal tiltakozik, hibakóddal és veremkiírással; ebéd előtt megjavítja.
Egy nem tiltakozott. Egy szerkeszthető prompt-felülírásokból álló tábla csak a prompt fajtájára volt kulcsolva – nem a fajtára és a bérlőre. Egy második cég, amely a saját példányát szerkesztette, csendben felülírta volna az első cégét, teljesen érvényes SQL-lel, hiba nélkül, figyelmeztetés nélkül, és elbukó teszt nélkül. Úgy találtuk meg, hogy egy kulcs megváltoztatása után egyenként átolvastuk az összes megmaradó egyedi indexet, a gyanúban, hogy a hangosaknak volt társaságuk.
Azért említjük, mert ez ennek a munkának az őszinte formája. Az elkülönítés nem olyan funkció, amelyet bekapcsol; hanem szokás, hogy elolvassuk a séma unalmas részeit azzal a feltételezéssel, hogy valami ott nem ért velünk egyet.
A tesztek, a jegyzőkönyv kedvéért: 942 darab, minden változtatáskor a nulláról újjáépített adatbázison futtatva. Nem azért vannak, hogy bizonyítsák: a tervezés okos. Azért vannak, mert ennek a tervezésnek a hibamódja csendes, és a csendes hibákért valakinek helyettük kell kiabálnia.
Mit nyer egy hétköznapi ember az elkülönítésből
- Egy csoport több céget is működtethet egyetlen telepítésről, és az egyik cég eladója sosem látja a másik ügyfelét – nem szabályzatból, hanem felépítésből fakadóan.
- Egy partnerprogram, egy promptkészlet, egy ügyfélre vonatkozó igény: mindegyik cégenként hatókörözött, így egy bérlő beállítása nem válhat mindenkié.
- Egy törlési kérelem határon belül teljesül, nem egy közös halmon át, ami teszi lehetővé, hogy őszintén válaszolhassunk rá.
- És senkinek sem kell erre emlékeznie. Ez a lényeg – egy garancia, amely emlékezéstől függ, nem garancia.
Még egy sor, amely nem adatbázisokról szól
A család minden testvérszolgáltatása a saját, névvel ellátott hitelesítő adatait használja. Semmi nem beszél megosztottal, így egyetlen szolgáltatás sem cselekedhet véletlenül egy másik nevében – egy kis fegyelem, amely közvetlenül abból született, hogy egyszer volt már megosztott tokenünk, és nem élveztük.
Ugyanaz az ösztön, mint az adatbázis-szabály. Tegye lehetetlenné, nem csupán lebeszéltté a rosszat, és a figyelmét az ügyfelekre fordíthatja az éberség helyett.
- 126 táblaMindegyik tartalmazza a saját bérlőjét, kikényszerített ellenőrzéssel.
- 272 szabályzatEgyenként leírva, így mindegyiket elolvasta egy ember.
- 3942 tesztEgy nulláról újjáépített adatbázissal szemben, minden módosításkor.
- 40 alapértelmezett bérlőA hatókör nélküli kérés soha nem jut el az adatokig.
Az élő builden mérve

„Az alkalmazásunk mindig cég szerint szűr.”
Az a „mindig” ebben a mondatban rengeteget csinál.
Tegye le a határt egészen az adatbázisig, és egy elfelejtett WHERE záradék nem más ügyfeleit adja vissza, hanem semmit. Az üres képernyő jobb hiba, mint egy kínos bemutatkozás.
Több márkát működtető csoportoknak →