SQLite Data Studio: pravice
Nazaj: SQLite Data Studio
Kdo sme v studiu kaj, določa model zmožnosti, ki ga uveljavlja strežnik: branje, pisanje, oblikovanje in upravljanje so ločene pravice, dodeljene globalno ali za posamezno povezavo.
[Live] Podroben model pravic, ki ga uveljavlja strežnik – skupine in uporabnike DokuWikija preslika na zmožnosti v studiu. Ni nadomestilo za ACL strani: pravilnik ureja izključno funkcije studia, nikoli bralnega dostopa do strani wikija.
Model zmožnosti
| Zmožnost | Dovoljuje |
|---|---|
use | preizkus rutin v studiu; sama odpre območje Rutine (enako kot design). Klici prek storitve sql.routines na matriko niso vezani – Referenca API → storitev |
query | konzolo SQL za branje, ogled strukture tabel in pogledov |
write | DML: urejanje v brskalniku po podatkih, konzolo SQL za pisanje |
design | DDL: oblikovalnik strukture tabel, brisanje tabel, pogledov, indeksov in tujih ključev |
export | izvoz rezultatov in tabel |
admin | upravljanje povezav, rutin in same matrike zmožnosti |
Vrstni red razreševanja
Pri vsakem preverjanju PolicyGate::isAllowed($capability, $conn, …) velja prvo pravilo, ki se
ujema, in sicer v tem vrstnem redu:
- Izjema za superuporabnike – vedno dovoljeno, ne glede na pravila v matriki. Tudi pri neznani ali napačno zapisani zmožnosti se najprej preveri, ali zmožnost sploh obstaja: programska napaka z izmišljenim imenom zmožnosti niti za superuporabnika ne sme po pomoti vrniti »dovoljeno«.
dbadmin_readonly=1writeindesignvedno postavi na prepovedano, tudi če bi ju matrika dovolila – naslednja pravila tega nikoli ne obidejo.- Pravilo za povezavo ima prednost pred globalnim; znotraj istega obsega ima pravilo za natančno uporabniško ime prednost pred vsakim pravilom
@skupina. Če pravila za uporabnika ni, se več ujemajočih pravil za skupine istega obsega združi. - Sicer je dostop zavrnjen.
Pogovorno okno z matriko
Pogovorno okno Matrika zmožnosti se odpre na dva načina: Pravice… v ukazni vrstici območja
Povezave (globalni obseg) ali Pravice v meniju Dejanja pri povezavi v raziskovalcu objektov (obseg
te povezave). Vrstice so skupine in uporabniki v zapisu
iz acl.auth.php (začetni @ pomeni skupino), stolpci šest zmožnosti, preklopnik pa izbere
obseg (globalno ↔ posamezna povezava).
- Podedovano ali lastno pravilo: v obsegu povezave vrstica brez lastnega pravila za povezavo prikaže podedovano globalno vrednost (zatemnjeno, z značko podedovano); lastno pravilo za povezavo globalno vrednost za ta subjekt v celoti nadomesti (globalno in lastno se ne združita).
- Odstranitev vrstice poteka prek istega pogovornega okna s potrditvijo v dveh korakih kot vsako drugo uničujoče dejanje v studiu – odstranitev pravila lahko takoj spremeni, kaj uporabnik sme.
- Hramba:
conf/wksqliteds.policy.json, atomaren zapis in.bak, brez skrivnosti. - Napačen ali poškodovan
policy.jsonse varno zapre na prazno matriko (zavrnitev za vse razen superuporabnikov), namesto da bi sprožil napako ali prevzel delno zaupanja vredne podatke.
Dve stopnji
- Stopnja 1 (zaključena): privzeti pravilnik »samo superuporabniki« – vedenje enako kot prej; vmesnik matrike in preverjanje sta delovala, dejansko pa nista spremenila ničesar, dokler pravilnika nihče ni razširil.
- Stopnja 2 (zaključena, po dokumentiranem varnostnem pregledu): meni studia in vsak vstop v območje sta vezana na pravilnik. Uporabnik, ki ni superuporabnik in ima vsaj eno zmožnost, vidi meni studia in lahko naredi natanko to, kar dovoljujejo njegovi vnosi v matriki; neposredna povezava na prepovedano območje prikaže nevtralno stran z zavrnitvijo brez notranjih podrobnosti (brez imena zmožnosti in brez imena povezave). Vidnost se filtrira na ravni območij in zavihkov (Povezave, zbirka podatkov, Rutine), ne na ravni posameznih gumbov v območju, ker preverjanje na strežniku vsako dejansko spremembo tako ali tako v celoti prepreči (vidnost v vmesniku nikoli ni edina zaščita).
Mejni primeri
- Vdelani PHP v rutinah ostane ne glede na dovoljenje v matriki vezan na prave superuporabnike (tudi če sta dodeljena
designaliuse) – podrobnosti: Rutine → model groženj za vdelani PHP. - Končna točka AJAX za pomožno vrstico poleg prijave, žetona seje in preverjanja ACL zahteva še zmožnost
query– enak vrstni red (dodatno, nikoli namesto) velja za vsako točko razvejanja. - Sprememba prijave ali skupin učinkuje takoj: razreševanje ob vsaki zahtevi znova prebere uporabniško ime in skupine, rezultata, shranjenega med prijavami, ni.
- Zavrnjeni poskusi dostopa se zabeležijo (uporabnik, zahtevana zmožnost in povezava, nikoli vsebina poizvedbe) – namenoma na ravni dnevnika
debug, da ob vklopljenem dušenju dnevnika (obratovanje na exFAT) ne pomenijo dodatne obremenitve.
Drugi dejavnik: vprašanje, na katero ta matrika ne odgovori
[Live] Zgornja matrika odgovori na vprašanje kdo ste, in to iz seje. Ne odgovori pa na vprašanje ali ste to še vedno vi. Prevzeta seja – ukraden piškotek, delovna postaja brez nadzora – ima na tem zaslonu enake pravice kot lastnik računa.
Za tri zmožnosti z največjim dosegom studio zato zahteva še drugi dejavnik, nedavno dokazan v tej seji. Dokaz poteka prek pogodbe Identity Plugin Contract v1 (opis pogodbe) in je zgolj dodaten: ne nadomesti niti ACL strani niti matrike, temveč se jima pridruži kot tretja vrata.
Tri kategorije
| Kategorija | Zahteva | Zakaj je kategorija |
|---|---|---|
code-write | MFA_ANY | Rutina je besedilo SQL, ki ga izvajalec pozneje izvede – kdor jo sme pisati, v namestitev shrani izvršljivo kodo |
connection-admin | MFA_ANY | Povezava vsebuje dostopne podatke za tuje zbirke podatkov |
db-destructive | MFA_ANY | Opustitev, brisanje, uvoz in obnovitev – izguba podatkov brez poti nazaj |
Pod te kategorije spada štirinajst dejanj: routine_create, routine_save,
routine_save_props, routine_delete · conn_create, conn_save, conn_delete ·
db_table_drop, db_view_drop, db_rows_delete, db_import_run, db_restore_run,
db_optimize, db_backup_delete.
Kaj izrecno ne zahteva drugega dejavnika
- Vsako bralno dejanje –
routine_test,conn_test,db_export,db_sql_run,db_check_syntax,db_integrity_checkin vsak predogled. Ničesar ne spremenijo. - Urejanje posameznih vrstic in sama matrika zmožnosti. To je vsakdanje delo na tem zaslonu.
Razlog ni udobje: delovno okolje, ki pred vsako poizvedbo zahteva kodo, ljudje izklopijo, namesto da bi ga uporabljali – dejavnik, ki se zahteva ves čas, pa postane formalnost in nato ne ščiti ničesar več.
Kje se preverja in zakaj na dveh mestih različno
- Oddana dejanja preveri
admin.php::handle(), še pred razvejanjem.Action\Admin::preProcess()pokličehandle()pred vsakim izpisom – preusmeritev na poziv je tam mogoča. - Pot izrisa tega ne zmore: teče sredi strani, preusmeritev od tam pa tiho spodleti. Zato obstaja most
do=wksqliteds_stepup, samostojna zahteva, ki odloči pred vsakim izpisom.
category se preveri proti zgornjemu fiksnemu seznamu,
preden se z njo karkoli zgodi; neznano ime pomeni zavrnitev, nikoli »brez zahteve«. Cilj vrnitve
se razreši prek pogodbe, nikoli se ne prevzame iz zahteve.
Tabela dejanj je zapisana natanko enkrat, v StepUpBridge; admin.php jo bere prek
categoryForAction(). Ta paket je za tabelo, ki se je oddaljila od lastnega razdelilnika, plačal že
trikrat – nabor testov zato obe smeri preverja drugo proti drugi.
Brez wkidentity se ne spremeni nič
Če paket za identiteto ni nameščen, je odgovor dovoljeno in zaslon se vede natanko tako kot prej. To je namerno odprto ob odpovedi: pogodba je dodatek k seznamu dostopa, manjkajoči dodatni paket pa ne sme zakleniti zaslona, ki je prej deloval.
Račun z nameščenim paketom, a brez vpisanega dejavnika dobi sporočilo stepup_denied
(To dejanje zahteva drugi dejavnik. Za ta račun ni vpisan noben, s katerim bi ga bilo mogoče
dokazati …). Pove, kaj manjka, namesto da bi zahtevalo »dokažite zdaj«: kdor bi zahtevo lahko
izpolnil, je preusmerjen na pravi poziv in tega sporočila nikoli ne vidi.
Sorodne teme
- Skrbniški vmesnik – katero območje ali zaslon zahteva katero zmožnost
- Povezave – upravljanje povezav zahteva
admin - Rutine – posebni primer vdelanega PHP
- Identity Plugin Contract v1 – pogodba, prek katere se dokaže drugi dejavnik