📐 Sistēmu modelēšana - vizuāli piemēri
Septiņas datu un sistēmu modelēšanas metodes ar diagrammām. Piemēri ir izdomāti, paredzēti apmācībām.
Entītiju un attiecību diagramma
ERD - bibliotēkas piemērs (lasītājs, izsniegums, grāmata)
Kad lietot
Pašā sākumā, kad jāsaprot, kādas lietas (entītijas) sistēmā ir un kā tās savā starpā saistītas - vēl pirms tabulu veidošanas.
Saistīts standarts
Chen ERD (1976), Crow's Foot notation, IDEF1X. Bieži ievada datu vārdnīcas (data dictionary).
Ierobežojumi
Nerāda ne gala tabulas, ne biznesa likumus. “Daudzi pret daudziem” saites vienmēr jāsadala ar starptabulu.
Objektorientētā klašu diagramma
UML klašu diagramma - transportlīdzekļu hierarhija
Kad lietot
Projektējot objektorientētu kodu - lai redzētu klases, to laukus, metodes un mantošanu vēl pirms rakstīšanas.
Saistīts standarts
OMG UML 2.5.1. Ietver arī sequence, state, activity un deployment diagrammas.
Drošības piezīme
private/protected nav drošības siena - kods tos var apiet (piem., Java reflection). Īsta drošības robeža ir atsevišķi procesi vai servisi.
Trīs slāņu datu modeļa transformācija
Konceptuālais → loģiskais → fiziskais modelis (noliktava)
Kad lietot
Lai pakāpeniski no biznesa skata nonāktu līdz gatavai datubāzes shēmai. Katrs slānis paredzēts citam lasītājam - biznesam, arhitektam, DBA.
Saistīts standarts
ANSI/SPARC three-schema architecture (1975). Mūsdienās: dbt staging→intermediate→mart slāņi seko līdzīgam principam.
Ierobežojumi
Mazos projektos konceptuālo slāni bieži izlaiž - bet tieši tas neļauj biznesa loģikai iestrēgt datubāzes shēmā.
Datu plūsmas diagramma, 1. līmenis
DFD - restorāna pasūtījums ar uzticamības robežām
Kad lietot
Lai redzētu, kā dati plūst starp cilvēkiem un sistēmām un kur tie glabājas. Tas ir pamats draudu modelēšanai.
Saistīts standarts
Yourdon/DeMarco notation. Mūsdienās - Microsoft Threat Modeling Tool, OWASP pytm, draw.io DFD šablons.
Drošības piezīme
Katra “uzticamības robeža” ir vieta, kur jāpārbauda, kas tu esi (autentifikācija), ko drīksti (autorizācija) un vai dati ir derīgi (validācija). No tās sākas STRIDE.
Relāciju normalizācija - no nenormalizētas līdz 3NF
Normalizācija - filmu noma
UNF Nenormalizēta tabula
Viena nomas tabula, kā to varētu pierakstīt kladē.
| rental_id | renter | phone | movies |
|---|---|---|---|
| 1 | Alice | 2000 1111 | Matrix, Inception |
| 2 | Bob | 2000 2222 | Heat |
| 3 | Alice | 2000 1111 | Tenet |
Problēma: vienā šūnā ir vairākas filmas, tāpēc nevar atrast vai saskaitīt vienu filmu.
1NF Katrā šūnā viena vērtība
Katra filma savā rindā. Atslēga tagad ir divas kolonnas kopā: rental_id + movie_id.
| rental_id | movie_id | renter | phone | title |
|---|---|---|---|---|
| 1 | M1 | Alice | 2000 1111 | Matrix |
| 1 | M2 | Alice | 2000 1111 | Inception |
| 2 | M3 | Bob | 2000 2222 | Heat |
| 3 | M4 | Alice | 2000 1111 | Tenet |
Problēma: renter un phone atkarīgi tikai no rental_id, bet title - tikai no movie_id, t.i. no daļas atslēgas. Tāpēc Alises dati atkārtojas katrā viņas filmas rindā (daļēja atkarība).
2NF Nekas nav atkarīgs no daļas atslēgas
Katru faktu pārceļ uz tabulu, kuras atslēgai tas tiešām pieder.
| rental_id | renter | phone |
|---|---|---|
| 1 | Alice | 2000 1111 |
| 2 | Bob | 2000 2222 |
| 3 | Alice | 2000 1111 |
| rental_id | movie_id |
|---|---|
| 1 | M1 |
| 1 | M2 |
| 2 | M3 |
| 3 | M4 |
| movie_id | title |
|---|---|
| M1 | Matrix |
| M2 | Inception |
| M3 | Heat |
| M4 | Tenet |
Problēma: rentals tabulā phone ir atkarīgs no renter, nevis no rental_id: rental_id → renter → phone. Ja Alise nomaina tālruni, tas jālabo katrā viņas nomā (tranzitīva atkarība).
3NF Nekas nav atkarīgs no citas neatslēgas kolonnas
Īrnieks kļūst par savu tabulu, un noma uz to atsaucas ar ārējo atslēgu.
| renter_id | name | phone |
|---|---|---|
| R1 | Alice | 2000 1111 |
| R2 | Bob | 2000 2222 |
| rental_id | renter_id |
|---|---|
| 1 | R1 |
| 2 | R2 |
| 3 | R1 |
| … |
|---|
| kā 2NF solī |
Rezultāts: katrs fakts glabājas vienā vietā. Tālruņa maiņa ir viena rinda, un nav ievietošanas, labošanas un dzēšanas anomāliju.
Īss likums: katra kolonna ir atkarīga no atslēgas (1NF), no visas atslēgas (2NF) un ne no kā cita kā atslēgas (3NF).
Kad lietot
Sistēmās, kur datus bieži maina un dublēšanās rada kļūdas (OLTP). Datu noliktavās (OLAP) bieži dara pretējo - apzināti dublē ātruma dēļ.
Saistīts standarts
1NF, 2NF un 3NF - Codd (1970-1971), BCNF - Boyce un Codd (1974), 4NF un 5NF - Fagin. Praksē parasti apstājas pie 3NF vai BCNF.
Ierobežojumi
Par daudz normalizācijas = daudz JOIN = lēnāka sistēma. Praksē sāk ar 3NF un denormalizē tikai tad, ja mērījumi to prasa.
C4 arhitektūras modelis, 2. līmenis (Container)
C4 konteineru līmenis - laikapstākļu prognožu platforma
Kad lietot
Lai aprakstītu sistēmas arhitektūru augstā līmenī. “Container” līmenis rāda atsevišķi palaižamās daļas - servisus, datubāzes, ārējās sistēmas.
Saistīts standarts
Simon Brown, c4model.com. arc42 ietvars (sec. 5 = Building Block View) bieži lieto C4 līmeņu vietā.
Drošības piezīme
Sistēmas robeža ir pirmā vieta, kur pieraksta, kā notiek autentifikācija, kur beidzas TLS un kurā sistēmā glabājas audita žurnāli.
Draudu modelēšana - Microsoft (1999)
STRIDE - draudi pa DFD elementiem
| DFD elements | S | T | R | I | D | E |
|---|---|---|---|---|---|---|
| External Entity (user, sistēma ārpus robežas) | ✓ | - | ✓ | - | - | - |
| Process (services, lambdas, mikropakalpojums) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Data Store (DB, faili, S3 bucket) | - | ✓ | ✓ | ✓ | ✓ | - |
| Data Flow (HTTP/TCP, queue, IPC) | - | ✓ | - | ✓ | ✓ | - |
Četri jautājumi - draudu modelēšanas ietvars
| Jautājums | Rezultāts | Rīks šajā ceļvedī |
|---|---|---|
| Ko mēs veidojam? | Sistēmas modelis ar uzticamības robežām | DFD, C4 |
| Kas var noiet greizi? | Draudu saraksts katram elementam | STRIDE |
| Ko mēs ar to darīsim? | Pasākums, atbildīgais un termiņš katram draudam | mazināt, pieņemt, novērst, pārnest |
| Vai paveicām labi? | Pārbaude, ka pasākumi ieviesti un modelis atbilst sistēmai | testi, pārskats pēc izmaiņām |
Shostack A. (2014) Threat Modeling, Threat Modeling Manifesto (2020). Modelis nav vienreizējs dokuments - to atjauno, kad mainās arhitektūra.
Kad lietot
Pēc DFD - iziet cauri katram elementam un pārbaudīt, kuri sešu veidu draudi (STRIDE) tam der. Katram atrastam draudam pieraksta, kā to mazināt.
Saistīts standarts
Microsoft Threat Modeling Tool, OWASP pytm. MITRE ATT&CK papildina ar reālajām taktikām. PASTA, LINDDUN - citas pieejas.
Drošības piezīme
STRIDE neaptver biznesa loģikas kļūdas, kriptogrāfijas vājumus vai piegādes ķēdi. Tāpēc to bieži apvieno ar OWASP Top 10 un MITRE ATT&CK.
Saīsinājumi
Ceļvedī lietotie saīsinājumi: oriģinālais nosaukums un ko tas nozīmē.
- ERD
- Entity-Relationship Diagram - entītiju un to saistību diagramma.
- UML
- Unified Modeling Language - modelēšanas valoda programmatūras diagrammām.
- DFD
- Data Flow Diagram - datu plūsmas diagramma.
- PK / FK
- Primary Key / Foreign Key - primārā atslēga / ārējā atslēga, kas norāda uz citu tabulu.
- 1NF / 2NF / 3NF / BCNF
- Normal Forms - normālformas - pakāpes, kā tabulas atbrīvo no dublētiem datiem.
- OLTP / OLAP
- Online Transaction / Analytical Processing - ikdienas darījumu sistēmas / analītikas sistēmas.
- DBA
- Database Administrator - datubāzu administrators.
- RDBMS
- Relational Database Management System - relāciju datubāzu sistēma (PostgreSQL, MySQL).
- C4
- Context, Containers, Components, Code - arhitektūras diagrammu modelis četros līmeņos.
- STRIDE
- Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation of privilege - sešas draudu klases.
- PASTA / LINDDUN
- Citas draudu modelēšanas metodes; LINDDUN - privātuma draudiem.
- IDOR
- Insecure Direct Object Reference - piekļuve svešam ierakstam, nomainot identifikatoru.
- MITM
- Man-in-the-Middle - uzbrucējs starp abām pusēm, kas lasa vai maina datus.
- RCE
- Remote Code Execution - uzbrucējs var palaist savu kodu serverī.
- ANSI/SPARC
- Trīs shēmu (ārējā, konceptuālā, iekšējā) datubāzu arhitektūra (1975).
- TSDB
- Time-Series Database - laikrindu datubāze (sensoru mērījumi).
- MQTT
- Viegls ziņojumu protokols IoT ierīcēm.