HTTP: skrbništvo
Skrbniški vmesnik pod /admin/v1/ ponuja skrbniško shrambo kot množice OData in ukaze; aplikacija za
upravljanje (Access) in razred VBA DbGwClient temeljita na njem.
Sintaksa
S skrbniško shrambo prehod njene tabele
ponuja pod /admin/v1/: kot množice OData, ki jih program za upravljanje poveže kot tabele (Access
prek gonilnika ODBC tega prehoda, z obrazci, ki jih za tabele tako ali tako ima), in kot ukaze za
vse, kar ni sprememba ene vrstice.
| Oblika | Naslov | Namen |
|---|---|---|
| OData | GET /admin/v1/odata/, $metadata, {Menge}, {Menge}({Schlüssel}), {Menge}/$count | Branje z $select, $filter, $orderby, $top, $skip, $count |
| OData | POST /admin/v1/odata/{Menge}, PATCH in DELETE na {Menge}({Schlüssel}) | Ustvarjanje (201), spreminjanje (200, If-Match s prebrano različico), brisanje (204) |
| Ukaz | POST /admin/v1/issue-key | Izdaja osebnega ključa: enkrat v telesu, kot enkratna povezava ali kot enkratna povezava po pošti |
| Ukaz | POST /admin/v1/activate-key | Omogočitev ključa na zahtevo za določen čas (id, hours) |
| Ukaz | POST /admin/v1/deactivate-key | Takojšnja prekinitev omogočitve ključa na zahtevo (id) |
| Ukaz | POST /admin/v1/save-sign-in-rule | Ustvarjanje pravila prijave z vsemi omrežji, osebami in skupinami v eni spremembi ali zamenjava v celoti (id) |
| Ukaz | POST /admin/v1/explain-sign-in | Kako pravilnik prijave odloča za osebo glede na način prijave in izvor, z ustreznimi pravili |
| Ukaz | POST /admin/v1/sign-in-profile | Kaj je za osebo pri prijavi običajno v izbranem obdobju (profil prijav) |
| Ukaz | POST /admin/v1/test-connection | Odpre vir podatkov; odgovor: dosegljiv, trajanje, različica, podatkovna zbirka, prijava ali sporočilo strežnika s številko napake in vrsto napake (preizkus povezave in račun storitve) |
| Ukaz | GET /admin/v1/service-account | Račun, s katerim se prehod s prijavo Windows prijavi v podatkovne zbirke (preizkus povezave in račun storitve) |
| Ukaz | POST /admin/v1/reload-catalog | Zavrže katalog enega (dataSource) ali vseh virov podatkov; naslednja zahteva ga prebere znova |
| Ukaz | GET /admin/v1/check-store | Preveri shrambo kot pri ponovnem nalaganju, ne da bi kar koli spremenil |
| Ukaz | POST /admin/v1/backup-store | Po ena preverjena kopija shrambe in njene datoteke dnevnikov v mapo sicherungen poleg nje, ime po času (gateway-LLLLMMDD-hhmmss.db in gateway-LLLLMMDD-hhmmss-logs.db); odgovor file, schemaVersion, bytes, logFile, logBytes (zadnja dva prazna brez datoteke dnevnikov). Mesto določi prehod, zahteva ne navede poti. Dve varnostni kopiji v isti sekundi: druga dobi 409. Kopiji ne vsebujeta glavnega ključa |
| Ukaz | POST /admin/v1/reseal-store | Kot istoimenski ukaz na računalniku |
| Ukaz | POST /admin/v1/enroll-totp | Nastavitev 2FA (dvostopenjskega preverjanja identitete) za osebo (person, delivery: key, link ali mail); konča njene seje, pri mail šele ob prevzemu. Stran enkratne povezave prikaže naslov za aplikacijo Authenticator kot kodo QR (SVG v strani, nič se ne nalaga naknadno) in poleg njega ključ za ročni vnos |
| Ukaz | POST /admin/v1/reset-totp | Odstrani 2FA osebe in konča njene seje |
| Ukaz | POST /admin/v1/set-geoip-source | Izbira vira geolokacijske zbirke |
| Ukaz | POST /admin/v1/update-geoip | Geolokacijsko zbirko takoj prenese iz izbranega vira (strežnik potrebuje dostop do interneta) |
| Ukaz | POST /admin/v1/upload-geoip | Prevzame datoteko geolokacijske zbirke, ki jo prinese klicatelj; telo = datoteka |
| Ukaz | POST /admin/v1/export-load | Dnevnik obremenitve kot datoteka za proizvajalca, brez oseb, izvora in vrednosti |
| Ukaz | GET /admin/v1/update-databases | Podatkovne zbirke modula za posodobitve z nastavitvami ter izpuščene konfiguracije |
| Ukaz | POST /admin/v1/update-status | Stanje ene podatkovne zbirke: odprti paketi z rokom, blokirajoče in neznane seje, odstopanja (posodobitve podatkovnih zbirk) |
| Ukaz | POST /admin/v1/update-history | Zaključeni paketi ene podatkovne zbirke s koraki, najnovejši najprej |
| Ukaz | POST /admin/v1/confirm-update, dismiss-update, retry-update | Potrdi čakajoči paket; neuspeli ali zavrnjeni paket opusti ali ga znova namesti |
| Ukaz | POST /admin/v1/move-update-deadline, cancel-update-notice | Premakne rok napovedanega paketa; prekliče napoved |
| Ukaz | POST /admin/v1/upload-update | Postavi paket v vhodno mapo podatkovne zbirke in ga takoj sprejme; telo = datoteka |
| Stran | GET/POST /admin/v1/pickup/{Kennung} | Enkratna povezava; brez prijave, identifikator je dokaz |
Parametri
Zakaj dve obliki. Kar je seznam, je množica: program za upravljanje zanjo ne potrebuje lastne kode. Kar vrne ključ ali vpliva na več kot eno vrstico, je ukaz: množica, ki jo Access po ustvarjanju prebere znova, bi morala pravkar izdani ključ bodisi znova izdati bodisi izgubiti.
Pripravljeni odjemalci. „Pregled aplikacije WKL Database Gateway Manager in razreda VBA“ (dokumentacija aplikacije za upravljanje) uporablja vse množice in ukaze (prijava s ključem ali računom Windows in z 2FA); „DbGwClient – razred VBA za podatkovni prehod“ (dokumentacija aplikacije za upravljanje) kliče ukaze iz lastnih aplikacij VBA.
Množice
Množice. Ustrezajo tabelam shrambe ena proti ena; seznami pravila ali ključa so vrstice podrejene množice s ključem nadrejene vrstice.
| Množica | Ključ | Opomba |
|---|---|---|
DataSources | Name | Name sledi pravilu poimenovanja aliasa. Povezava se poda bodisi kot niz Connection (samo za pisanje, pri branju vedno prazen) bodisi kot lastnosti povezave ConnectionProperties, iz katerih ponudnik sestavi niz; pri ustvarjanju eno od obojega; pri spreminjanju vrednost nadomesti zapečateni niz, prazna vrednost |
ga ohrani. Provider, ProviderVersion in ProviderOptions (objekt JSON iz besedil) kot v konfiguraciji. Stikala AllowPassThrough, AllowCheckedStatements (privzeto true), AllowSqlLogins kot v konfiguraciji | ||
Providers, ProviderProperties | Id, PackageVersion; Provider, PackageVersion, Scope, Name, Language | Samo za branje: nameščeni paketi ponudnikov in lastnosti, ki jih vsak opiše za svojo povezavo, glejte lastnosti povezave ponudnika |
DataSourceTables | DataSource, Setting, Pattern | Setting je row_stamp ali keyless_write; samo ustvarjanje in brisanje |
ImpersonationDenyRules, ImpersonationDenyItems | Id; RuleId, Item, Value | Item: login, role, from, except_from |
ClientRules, ClientRuleItems | Id; RuleId, Item, Value | Item: database, resource, verb, object, except_object (pravice po objektu; vnos v napačni obliki preverjanje zavrne z 422). Holders šteje, kdo ima pravilo (osebe, računi in skupine Windows, prijave SQL Server). RuleVersion (samo za branje) je različica, ki jo navede AuditEntries.AccessRule; če se razlikuje od različice v vnosu, se je pravilo od takrat spremenilo |
WindowsAccounts, SqlLogins | Account, Client; Login, Client | Dodelitve pravilom |
Persons, PersonRules | Id; PersonId, Client | SqlLogin (lastna prijava SQL Server osebe, za Impersonate z osebnim ključem), WindowsAccount (ime ali SID, razreši se pri pisanju), Email (naslov brez prikaznega imena, predlog za vabilo po pošti; sicer 400), DefaultRole (privzeta identiteta), SecondFactor (stanje 2FA: none, pending, active), LeftAt (izstop iz organizacije, nastavi ga skrbništvo, tudi vnaprej). Samo za branje: LastSignInAt in LastSignInMethod, zadnja uspešna prijava (način kot v dnevniku prijav, na primer personalKey, windows); prehod jo zapiše enkrat na minuto, ostane tudi po roku hrambe dnevnika prijav in ne spremeni različice osebe. Za prikaz: Status/StatusKind, SecondFactorText/SecondFactorKind, števila Rules, ValidKeys, OpenSessions, ExpiringKeys (veljavni ključi, ki potečejo v 14 dneh); PersonRules.Person navede ime. DELETE osebe, ki je pustila sledi (ključi, seje, prijave, obremenitev ali lastne spremembe), prehod zavrne s 422; onemogočite jo z Enabled = false (Hramba in brisanje) |
PersonalKeys, PersonalKeyItems | Id; KeyId, Item, Value | Izdani samo z issue-key. Spremenljivo: Label, ReadOnly, TotpExempt (samo pri ključu samo za branje), ExpiresAt (ne dlje od najdaljše veljavnosti od izdaje), OnDemand in Revoked (zaklepa ni mogoče odpraviti). ActiveUntil nastavljata samo activate-key/deactivate-key. Za prikaz: Status („gültig“ (veljaven), „läuft in 5 Tagen ab“ (poteče čez 5 dni), „abgelaufen“ (potekel), „gesperrt“ (zaklenjen), „ruht“ (miruje), „frei bis 15:30 UTC“ (omogočen do 15.30 UTC)), StatusKind, ExpiresInDays, CanRevoke, CanActivate |
SignInFileRules | Position | Samo za branje. Pravila prijave, ki so še v konfiguracijski datoteki (Gateway:Security:SignInRules). S skrbniško shrambo ne veljajo: služila so le kot začetna vrednost ob ustvarjanju shrambe, prehod pa ob zagonu nanje opozori. Polja: Position (n kot v file:n), Scope, Method, Effect, Mode, Label, Conditions (uporabljeni seznami kot besedilo, na primer ExceptFrom: 10.0.0.0/8; ExceptHours: Mon-Fri 06:00-20:00), Exceptions (število), RuleVersion, InForce (s shrambo vedno false). Za čiščenje vnose odstranite iz datoteke |
SignInRules, SignInRuleItems | Id; RuleId, Item, Value | Pravilnik prijave; Item: from, except_from, person, except_person (vrednost: Id osebe), windows_group, except_windows_group (ime ali SID), country, except_country (koda države), operator, except_operator (operater omrežja, AS3320), client, except_client (vrsta programa), hours, except_hours (časovno okno). RuleVersion pravila (samo za branje) je različica, ki jo navajata dogodki prijave in explain-sign-in; če se razlikuje od različice v dogodku, se je pravilo od takrat spremenilo. Mode pravila: Enforce (privzeto) ali Report (Preizkus pravila). Osebo, ki ne obstaja, ali neveljavno kodo države, operaterja omrežja ali časovnega okna preverjanje zavrne z 422 |
SignInRuleExceptions, SignInRuleExceptionItems | Id; ExceptionId, Item, Value | Časovno omejene izjeme pravila: RuleId, ValidUntil (UTC, prazno = brez konca), Label, LapseLogged (samo za branje: konec je v dnevniku sprememb); Item: person (vrednost: Id osebe), windows_group, country, from, operator, client, hours. Izjemo brez značilnosti in brez konca preverjanje zavrne z 422. Kdor premakne ValidUntil, ponastavi LapseLogged |
Settings | Name | totp_session_hours, self_service_key_days (samopostrežba), totp_enrol_hours, max_activation_hours (ključi na zahtevo), installation_name (ima prednost pred Gateway:Store:TotpIssuer, glejte konfiguracijo), mail_link_hours (veljavnost enkratne povezave po pošti, 1–720 ur); drugo ime je zavrnjeno, neveljavna vrednost z 422 |
MailTemplates | Id | Predloge HTML za vabila po pošti, enake za vse skrbnike: Name, Purpose (KeyPickup, TotpEnrollment, Welcome), Subject, Html; Builtin in ChangedAt nastavi prehod. Ograde samo iz {{Person}}, {{Link}}, {{GueltigBis}}, {{Dienst}}, {{Absender}}, {{Organisation}}; KeyPickup in TotpEnrollment potrebujeta {{Link}}; največ 256 KB. Kršitev: 400 z vsemi razlogi. Tri vgrajene predloge (ena za vsak namen) je mogoče nadomestiti, ne pa preimenovati (400) ali izbrisati (422). Logotip predloga vključi kot src="cid:logo"; odjemalec ga pripne s tem identifikatorjem. Prehod ne pošilja pošte |
SessionTokens | Id | Seje 2FA; samo Revoked (dokončno) in brisanje; Role navede vezano identiteto. Za prikaz: Status („offen“ (odprta), „abgelaufen“ (potekla), „beendet“ (končana)), StatusKind, CanEnd. EndReason navede, kako se je seja končala: ended (končana v skrbništvu), person-locked (oseba zaklenjena), key-revoked (ključ seje preklican), factor-renewed (drugi faktor na novo nastavljen), factor-reset (drugi faktor odstranjen), expired (potekla, ne da bi bila prej končana); EndedBy navede, kdo jo je končal, tako kot ga navede dnevnik sprememb (Konsole za ukaz revoke-key). Prehod seje konča, namesto da bi jih izbrisal; seje, končane pred to različico, imajo obe polji prazni |
DatabaseIdentities, IdentityAssignments | Id; Id | Identitete podatkovne zbirke. Kind: Login, Own, Alias; skupno prijavo prehod ob shranjevanju preveri s preizkusnim preklopom. Dodelitev navede natanko en vir: PersonId, WindowsAccount ali KeyId; Source, DataSource in Role doda prehod |
DataSourceObjects | DataSource, Schema, Name | Samo za branje. Objekti v katalogu vsakega vklopljenega vira podatkov, zapisani tako, kot jih navede pravilo: Kind je vrsta pod Resources (tables, views, functions, procedures), Pattern vnos pod Objects (schema.name). Predlogi za program za upravljanje; vir podatkov, katerega katalog trenutno ni berljiv, na seznamu manjka |
UpdateSettings | Database | Nastavitve delovanja posodobitev podatkovnih zbirk za posamezno podatkovno zbirko: Expand in Contract (automatic ali confirm), NoticeMinutes (0–10080), SessionWindowMinutes (1–1440), poti sporočanja NotifyEventLog (privzeto vklopljeno), NotifyFile in NotifyEmail (privzeto izklopljeno, glejte sporočila) s prejemniki NotifyEmailTo (poštni naslovi, ločeni z ;; NotifyEmail brez prejemnika storitev zavrne z 400), hramba varnostnih kopij BackupKeepCount (1–1000, privzeto 10) in BackupKeepDays (0–3650, privzeto 30); ChangedAt nastavi storitev. Izpuščeno polje dobi privzeto vrednost, vrednost zunaj teh obsegov storitev zavrne z 422. Brez vnosa in po njegovem izbrisu veljajo privzete vrednosti |
SignInHours, SignInOrigins, SignInEvents, SignInFindings, SignInAdvice, GeoIpFiles, GeoIpSource | Samo za branje; glejte Dnevnik prijav in geolokacijska zbirka | |
LoadShapes, LoadHours, LoadPersons, SlowRequests, LoadFindings, LoadAdvice | Samo za branje; glejte Dnevnik obremenitve | |
ChangeLog | Id | Samo za branje |
AuditEntries | Sequence | Samo za branje. Revizijska sled (`Gateway:AuditLog`): dostopi (Kind = Zugriff: čas, klicatelj, alias, vir, metoda, rezultat, status, korelacija) in lastni stavki (Anweisung, z besedilom). S skrbniško shrambo iz datoteke dnevnikov, tudi po ponovnem zagonu, za Gateway:AuditLog:Days; Sequence je takrat številka v datoteki. Na poizvedbo množica vrne največ najnovejših 20.000 vnosov, ki ustrezajo obdobju (At) in osebi (Person eq) filtra. Brez shrambe zadnjih 10.000 vnosov od zagona, stavki skrajšani na 4.000 znakov. Person in KeyId navedeta osebo in osebni ključ klica, da je mogoče filtrirati po njiju. Pri zavrnitvi s pravilom prijave SignInRule navede oznako in različico tega pravila (2@8da4235bc439aac0, glejte Podlaga odločitve). Target navede, kaj je zahteva naslovila: pot in poizvedbo v berljivi obliki (/odata/lager/dbo/Artikel(17), /odata/lager/dbo/Artikel?$filter=Nr eq 17), največ 2.000 znakov, brez $skiptoken; poizvedbe v telesu zahteve ne vsebuje. Pri odgovorjenem dostopu do tabele ali pogleda AccessRule navede pravilo dostopa, ki ga je dovolilo: ime pravila in različico (lager-lesen@3f2a8c41d07b9e65, RuleVersion iz ClientRules); alias navede vnos sam. Vnosi pred to razširitvijo imajo obe polji prazni |
ServiceStatus | Id | Samo za branje, ena vrstica: obremenitev prehoda od zagona iz pomnilnika – RequestsLastMinute, RequestsLastFiveMinutes, InFlight, MedianMilliseconds, P95Milliseconds, DeniedLastFiveMinutes (401/403/429; brez odgovora na zahtevo brez prijavnih podatkov, s katero se začne vsaka prijava Windows), ErrorsLastFiveMinutes (≥ 500), Saturated (več kot 50.000 zahtev v petih minutah: števila so spodnja meja), omejitev zahtev (RateLimitPerCaller, RateLimitWindowSeconds, prazno brez omejitve) in iz shrambe OpenSessions, ValidKeys, ExpiringKeys (14 dni). Brez preverjanj pod /health |
Polja za prikaz. Status je besedilo za prikaz, StatusKind ena od petih vrst (ok, warn,
bad, info, neutral), po kateri program za upravljanje obarva oznako; besedilo je vedno prikazano,
barva nikoli sama. Polja Can… povedo, ali je ukaz za vrstico trenutno mogoč. Prehod jih izračuna ob
branju po uri shrambe; so samo za branje (pisanje 400) in niso del različice vrstice, saj se ključ ne
spremeni zato, ker mine dan. Prehod jih izračuna sam, ne Access, ker se izraz, kot je IIf(…), v
poizvedbi Accessa ne prevede prek gonilnika ODBC, podatkovna mreža v strežniškem načinu pa bi se tedaj
vrnila k počasnemu branju prek Accessa.
Vsaka množica ima lastnost Version (osem bajtov SHA-256 prek shranjenih vrednosti vrstice, vključno
z zapečatenimi) kot različico vrstice. Kdor spremeni vrstico, ki jo je po branju spremenil nekdo
drug, prejme 412; Access prikaže običajno sporočilo o konfliktu pri pisanju. Vrednosti, ki jih
množica prikazuje iz druge množice, niso del različice vrstice: število Rules osebe, Holders pravila
dostopa, ime Person dodelitve, ključa ali seje. Novo pravilo za osebo ali njeno novo ime zato ne
povzroči konflikta pri pisanju v urejanju, ki je v tistem trenutku odprto. Številke so int
(Edm.Int32), ne bigint: Access bigint brez svoje možnosti za velika števila prikaže kot
besedilo in nato zavrne pogoj, kot je Id = 3. Besedilo filter primerja brez
razlikovanja velikih in malih črk, tako kot SQL Server in kot shramba primerja imena.
Štetje, največja vrednost in združevanje
Skrbništvo bere vrstice in jih šteje, ne združuje pa jih. Možnost $apply zavrne z 400, njegov
dokument metapodatkov pa združevanja ne deklarira (Aggregation.ApplySupported manjka). Gonilnik ODBC se po
tej deklaraciji odloči, kaj pošlje skrbništvu (prevod v podrobnostih:
„Podprti SQL“ v dokumentaciji gonilnika ODBC):
| Stavek, ki ga Access preda gonilniku | Zahteva skrbništvu | Rezultat |
|---|---|---|
SELECT COUNT(*) FROM "Množica", na primer iz DCount("*", "Množica") | Množica/$count | Število vrstic |
SELECT COUNT(*) FROM "Množica" WHERE …, na primer iz DCount("*", "Množica", "Id > 4711") | Množica/$count?$filter=… | Število ustreznih vrstic |
SELECT … FROM "Množica" WHERE … ORDER BY … | Množica?$select=…&$filter=…&$orderby=… | Vrstice |
MAX, MIN, SUM, AVG, COUNT(stolpec), GROUP BY, HAVING, DISTINCT, na primer iz DMax, DMin, DSum, DAvg, DCount("stolpec", …) ali iz poizvedbe s skupnimi vrednostmi | Nobena | Gonilnik stavek zavrne z 42000 („Der Dienst kuendigt die Gruppierung ueber $apply … nicht an“: storitev združevanja ne napoveduje); Access javi napako 3146 (klic ODBC ni uspel) |
Za štetje uporabite DCount("*", …), ne DCount("stolpec", …): v zahtevo za štetje se pretvori
samo COUNT(*), s pogojem ali brez njega.
Največjo vrednost stolpca dobite kot prvo vrstico poizvedbe, razvrščene padajoče. Prek HTTP, na
primer z lastnim dostopom HTTP skrbniškega programa:
GET /admin/v1/odata/SignInFindings?$select=Id&$orderby=Id desc&$top=1. Pri SignInFindings je to
redko potrebno: če želite šteti samo nove ugotovitve, si zapomnite največji prebrani Id in pošljite
SignInFindings/$count?$filter=Id gt 4711 (glejte Ugotovitve pravil prijave).
Preverjanje in dnevnik sprememb
Vsaka sprememba se pred uveljavitvijo preveri. Sprememba je transakcija: primerjava različice,
pisanje, vpis v dnevnik sprememb in nato preverjanje celotne vsebine, enako kot pri ponovnem
nalaganju, vključno s pravili, ki jih navaja oseba. Če vsebina preverjanja ne opravi, se vse
razveljavi, odgovor 422 pa navede vsako napako. Brez tega preverjanja bi bilo napačno zapisano v shrambi
pravilo, vsako ponovno nalaganje bi ga zavrnilo, prehod pa bi neopazno ostal pri stari različici,
čeprav bi vmesnik sporočil uspeh. Uveljavljena sprememba velja takoj (prehod shrambo znova
naloži, ne da bi čakal na PollSeconds). Pri kršitvi omejitve same shrambe (neznan Item, podvojen
ključ, podrejeni vnos brez nadrejene vrstice) prehod prav tako odgovori z 422 in sporočilom SQLite.
Dnevnik sprememb. V isti transakciji kot sprememba: čas, klicatelj (Person (Kennung), ime
ključa storitve, račun Windows ali Einrichtung), dejanje (insert, update, delete, command),
množica ali ukaz, ključ, vrednosti prej in potem kot JSON. Niz povezave in lastnosti povezave se
pojavijo le kot „neu gesetzt“ (na novo nastavljen), ključ nikoli. Razveljavljena sprememba ne pusti vnosa, uveljavljena pa ga ima vedno. Podrejeni vnosi, ki se
izbrišejo skupaj z nadrejeno vrstico, niso navedeni posamezno.
Pravica in prvi skrbnik
Pravica. Pravilo mora vir admin navesti izrecno; * ne zadošča, tako kot pri pravici
sql. Databases pravila ne omejujejo skrbništva, saj to ne pripada nobenemu viru podatkov. Pravilo za
skrbništvo:
{ "Id": "verwaltung", "Resources": [ "admin" ], "Verbs": [ "*" ] }
Z "ReadOnly": true isto pravilo bere skrbništvo in preverja povezave, ne spremeni pa ničesar (na
primer za revizijo):
{ "Id": "revision", "Resources": [ "admin" ], "Verbs": [ "*" ], "ReadOnly": true }
V skrbništvo se je mogoče prijaviti z osebnim ključem in računom Windows, s ključem storitve le pri
Gateway:Store:RequireAdminTotp = false, in če nobeno pravilo prijave za skrbništvo ne zahteva
2FA (nova shramba tako pravilo vsebuje; sicer 403 „… gehoert zu keiner Person“ (… ne pripada nobeni
osebi), ker ključ storitve ne more imeti 2FA), ne pa s prijavo SQL Server: njeno geslo SQL Server
preveri na viru podatkov, skrbništvo pa ne pripada nobenemu viru. Osebni ključ, ki je
omejen na vire podatkov, skrbništva nikoli ne doseže; ključ samo za branje ga kvečjemu bere. Vsak
naslov vmesnika odgovarja samo prek zaščitene povezave: HTTPS, zaupanja vreden posrednik z
X-Forwarded-Proto: https ali zahteva z lastnega računalnika. Sicer 403, tudi za enkratno povezavo.
Prvi skrbnik. Skrbništvo doseže le, kogar navaja pravilo z admin. Prvo takšno osebo ustvari
ukaz init-admin na strežniku, ne zahteva prek omrežja, glejte
Prvi skrbnik in reševanje.
Enkratne povezave
Enkratna povezava. issue-key z "delivery": "link" namesto ključa vrne naslov, veljaven
Gateway:Store:PickupMinutes (privzeto 15 minut, glejte konfiguracijo).
Stran na tem naslovu ob odprtju prikaže le gumb; šele njegov POST prikaže ključ, enkrat. Tako poštni
program ali klepet, ki povezave odpira za predogled, ključa ne prevzame vnaprej. Čakajoči ključ je
samo v pomnilniku procesa, nikoli na disku; ponovni zagon odprte povezave razveljavi. Prevzem je
zapisan v dnevniku sprememb (Einmal-Link, z izvorom).
<a id=„enkratna-povezava-po-e-posti“></a>Enkratna povezava po pošti. issue-key in enroll-totp z
"delivery": "mail" vrneta naslov za vabilo po pošti (person, delivery, link, linkExpiresAt),
veljaven mail_link_hours oz. MailLinkHours (privzeto 72 ur). Drugače kot navadna enkratna povezava:
- Noben ključ ne čaka. Shramba hrani nalogo in kontrolno vsoto SHA-256 povezave, ne ključa. Ključ oz. faktor 2FA nastane šele ob prevzemu; do takrat obstoječi faktor osebe ostane nespremenjen. Kopija datoteke shrambe zato ničesar ne odpre.
- Preživi ponovni zagon prehoda.
- Natanko enkrat. Drugo odprtje prikaže „bereits abgeholt am … um …“ (že prevzeto dne … ob …) (
410) s prošnjo, naj to sporočijo skrbništvu, če prejemnik tega ni storil sam; potekla ali neznana povezava404. - Odgovor brez identifikatorja ključa: ključ obstaja šele po prevzemu; takrat se pojavi v
PersonalKeys.expiresAtpred koncem povezave prehod zavrne z400. - Dnevnik: izdaja kot ukaz z
delivery: mail, prevzem kotissue-keyoz.enroll-totpz akterjemEinmal-Link von <Aussteller>in izvorom. - Če naloge ob prevzemu ni več mogoče izpolniti (oseba odstranjena), stran to prikaže z
409; povezava takrat ostane neporabljena.
{ "person": "Erika Muster", "label": "Excel Bericht", "expiresAt": "2027-03-31T00:00:00Z",
"readOnly": true, "databases": [ "fachdaten" ], "from": [ "10.0.0.0/8" ], "exceptFrom": [],
"delivery": "key" }
Odgovori
Za vse množice in ukaze skrbništva:
| Odgovor | Pomen |
|---|---|
401 „Es wurde keine gueltige Anmeldung vorgelegt.“ (Predložena ni bila nobena veljavna prijava.) | Ni ključa ali neznan ključ |
403 „Die Verwaltung ist nur ueber HTTPS oder vom eigenen Rechner erreichbar.“ (Skrbništvo je dosegljivo samo prek HTTPS ali z lastnega računalnika.) | Nezaščitena povezava |
403 „Die Verwaltung ist fuer diesen Aufrufer nicht freigegeben.“ (Skrbništvo za tega klicatelja ni odobreno.) | Ni pravila z admin; pravilo samo za branje pri spremembi; ključ omejen na vire podatkov |
400 | Neznano polje, manjkajoče obvezno polje, množica brez tega dejanja (ustvarjanje PersonalKeys, spreminjanje ChangeLog), odprava zaklepa, prepozen potek |
412 | Vrstica je bila od branja spremenjena |
422 | Vsebina po spremembi neveljavna ali omejitev shrambe; sporočilo navede razlog |
Preizkus povezave in račun storitve
test-connection. Telo { "dataSource": "fachdaten" }. Odgovor navede dataSource, reachable,
elapsedMilliseconds, productVersion, database in login; če vir podatkov ni dosegljiv, še message (sporočilo
strežnika v njegovem jeziku), number in failure. Preizkus odpre povezavo enkrat, brez bazena povezav, in sporoči
odgovor strežnika; gonilnik podatkovne zbirke povezave pri tem ne poskusi odpreti znova. Samo po napaki 233 („na drugem
koncu cevi ni procesa“) jo takoj odpre še enkrat: SQL Server v istem računalniku zavrnjeno prijavo prek Shared Memory
ali Named Pipes včasih sporoči tako namesto z 18456. Če strežnik znova odgovori z 233, res ni dosegljiv:
{ "dataSource": "fachdaten", "reachable": false, "elapsedMilliseconds": 7,
"message": "Login failed for user 'NT SERVICE\\Wkl.Data.Gateway'.", "number": 18456, "failure": "Login" }
number je številka podatkovne zbirke (pri SQL Server številka napake); prazno, če je ni. failure
napako razvrsti neodvisno od jezika strežnika; program po njej pojasni vzrok in predlaga rešitev:
failure | Pomen | SQL Server, primeri | Rešitev |
|---|---|---|---|
Login | Prijava zavrnjena: neznana prijava, napačno geslo, zaklenjena, potekla | 18456, 18452, 18470, 18486–18488 | Prijavo v SQL Server ustvarite ali omogočite (skrbništvo podatkovne zbirke) |
Database | Prijava sprejeta, podatkovna zbirka manjka ali zanjo ni dostopna | 4060, 4064, 911 | Ustvarite uporabnika v podatkovni zbirki ali preverite ime zbirke |
Permission | Povezano, manjka dovoljenje | 229, 230, 262, 297, 300, 916 | Podelite dovoljenje v podatkovni zbirki |
Network | Strežnik ni dosežen: ime, vrata, ustavljena storitev, požarni zid, zavrnjeno šifriranje | 2, 26, 53, 258, 10060, 10061, resnost od 20 | Preverite ime, vrata in požarni zid |
Timeout | Ni odgovora v roku | -2 | Obremenitev strežnika, Connect Timeout |
Unreadable | Strežnik odgovori, a podatkovne zbirke ne more brati | 605, 823, 824, 942, 945 | Preverite pogon, znova zaženite strežnik podatkovne zbirke |
Configuration | Nastavitve neuporabne: niz zavrnjen, ponudnik ni uporaben | – | Popravite povezavo oz. ponudnika vira podatkov |
Other | Druga napaka | – | Preberite message in number |
Ponudnik, zgrajen za starejšo različico specifikacije vmesnika ponudnika, number in failure ne vrne; ostaneta
prazna.
service-account. Brez telesa. Račun, s katerim se vir podatkov s prijavo Windows
(Integrated Security) prijavi v podatkovno zbirko – ime, za katero skrbništvo podatkovne zbirke ustvari
prijavo:
{ "account": "NT SERVICE\\Wkl.Data.Gateway", "kind": "Virtual",
"networkAccount": "FIRMA\\SRV-DATEN$", "domain": "FIRMA" }
| Polje | Vsebina |
|---|---|
account | Račun storitve; tako ga vidi SQL Server na istem računalniku |
kind | Virtual (navidezni račun storitve NT SERVICE\…), NetworkService, LocalSystem, LocalService, Managed (skupinsko upravljani račun storitve DOMENA\ime$) ali User |
networkAccount | Tako ga vidi SQL Server na drugem računalniku: pri Virtual, NetworkService in LocalSystem računalniški račun DOMENA\RAČUNALNIK$, pri domenskem računu ta sam. Prazno, če računa ne pozna noben drug računalnik (računalnik brez domene, LocalService, lokalni uporabniški račun) – prijava Windows tedaj uspe le pri SQL Server na istem računalniku |
domain | Domena računalnika (ime NetBIOS); brez domene prazno |
Kaj SQL Server potrebuje za ta račun, je opisano v Namestitev – napotki.
Ključi na zahtevo, pravila prijave, pojasnilo
Ključi na zahtevo. issue-key z "onDemand": true izda ključ, ki miruje, dokler ga skrbništvo
ne odobri. activate-key z { "id": "k…", "hours": 4 } ga odobri; nova odobritev nadomesti tekočo.
Zavrnjen (400, sporočilo navede razlog) je ključ, ki ne velja na zahtevo, je zaklenjen ali potekel,
trajanje nad max_activation_hours in odobritev prek datuma poteka ključa. deactivate-key z
{ "id": "k…" } jo takoj konča. Oboje je zapisano z akterjem v dnevniku sprememb; odgovor navede
activeUntil.
Pravilo prijave v enem koraku. Pravilo velja, takoj ko je shranjeno. Prek množic najprej nastane
pravilo in šele nato njegove značilnosti – zavrnitev vmes velja za vse, tudi za tistega, ki ga
shranjuje. save-sign-in-rule pravilo in značilnosti zapiše v eni spremembi:
{ "scope": "All", "method": "Any", "effect": "Deny", "label": "außen nur Frank",
"exceptFrom": [ "10.0.0.0/8" ], "exceptPersons": [ "Frank Mustermann" ] }
Drugi seznami: from, persons, windowsGroups, exceptWindowsGroups, countries,
exceptCountries, operators, exceptOperators, clients, exceptClients, hours, exceptHours (pomen v
Pravilniku prijave). Operaterje omrežja prehod shrani kot AS
s številko, časovna okna pa v izpisani obliki (Mon-Fri postane Mon,Tue,Wed,Thu,Fri 00:00-24:00). mode
je Enforce (privzeto) ali Report za pravilo v preizkusu. Časovno omejene izjeme so v exceptions,
vsaka s persons, windowsGroups, countries, from, operators, clients, hours, until (UTC) in label:
{ "scope": "Data", "effect": "Deny", "label": "samo Nemčija",
"exceptCountries": [ "DE" ], "exceptFrom": [ "10.0.0.0/8" ],
"exceptions": [ { "persons": [ "Frank Mustermann" ], "countries": [ "TH" ],
"until": "2026-11-02T00:00:00Z", "label": "dopust" } ] }
Z "id" ukaz nadomesti pravilo z vsemi značilnostmi in izjemami; brez njega ustvari novo. Odgovor { "id" }. Pri neznani osebi ali
neznanem pravilu prehod odgovori z 400, pri vsebini, ki bi bila po spremembi neveljavna, z 422; v obeh primerih se nič ne shrani.
Pojasnilo prijave. explain-sign-in z istim pravilnikom kot resnična prijava izračuna, kaj velja
za osebo – za vsak način prijave osebe (račun Windows, prijava SQL Server, vsak osebni ključ) in vsak
naveden izvor:
{ "person": "Frank Mustermann", "scope": "Data",
"origins": [ { "name": "Firmennetz", "address": "10.1.2.3" },
{ "name": "Außen", "address": "203.0.113.7" },
{ "name": "Tajska", "address": "203.0.113.7", "country": "TH" },
{ "name": "Unbekannt", "address": null } ] }
Izvor lahko svojo državo navede sam s country; tako lahko vprašate „kaj velja za Franka na
Tajskem?“, ne da bi poznali naslov od tam. Brez country prehod državo prebere iz geolokacijske
zbirke kot pri resnični prijavi. Prav tako izvor sprejme operator (operater omrežja, AS3320; brez navedbe
iz geolokacijske zbirke), client (vrsta programa; brez navedbe neznana) in at (trenutek v UTC; brez
navedbe zdaj), na primer
{ "name": "Sobota z Excelom", "address": "203.0.113.7", "client": "Power Query", "at": "2026-10-24T10:00:00Z" }.
Odgovor za vsak način prijave (ways) vodi celico za vsak izvor z result – allowed, code
(potrebna koda 2FA), denied ali stanje, ki učinkuje pred pravilnikom: revoked, expired,
rests (ključ na zahtevo miruje), personDisabled, outsideKeyNetworks – in ustrezna pravila
(id, version, label, effect, method, scope); floor prikaže spodnjo mejo skrbništva, country državo, po
kateri je bila sprejeta odločitev (prazno, če je neznana ali nobeno pravilo ne navaja držav), operator, client in at druge
ocenjene signale, tried
pravila v preizkusu, ki bi veljala (kot rules; ne vplivajo na result), in
spared pravila, ki jih izjema odpravi (id, version, rule, effect, exception, until).
id in version imata enaki vrednosti kot v dogodku prijave (glejte
Podlaga odločitve); tako lahko preverite, ali pravilo še velja tako kot ob
kakšni prejšnji prijavi. Račun Windows se
oceni brez svojih skupin, saj jih pozna le resnična prijava; če pravilo navaja skupine, je zraven
groupsUnknown. Od 1 do 16 izvorov na klic.
Dnevnik prijav in geolokacijska zbirka
Dnevnik prijav vsako odločitev o prijavi z izvorom zabeleži v
datoteki dnevnikov poleg shrambe (nastavitve
pod `Gateway:SignInLog`, postopek v
Preverjanje vzorcev prijav in njihovega izvora). Prehod
zbrane odločitve zapiše enkrat na minuto in ob tem uporabi pravila prijave, zato se prijava v množicah
pojavi do minute pozneje. Vse množice so samo za branje. SignInFindings bere shranjene ugotovitve,
druge množice se izračunajo ob branju.
| Množica | Ključ | Vsebina |
|---|---|---|
SignInHours | Hour, Method, Outcome, Country, NetClass | Število (Count) na uro (UTC, na polno uro), poleg tega Weekday (1 = ponedeljek) in HourOfDay po uri strežnika. Brez osebe in naslova; hrani se HourDays dni |
SignInRuleReports | Id | Za vsako pravilo v preizkusu in različico, v času hrambe dogodkov: Rule (oznaka), RuleVersion, Label, Effect, Would (prijave, ki bi jih zadelo), Spared (prijave, za katere bi ga izjema odpravila), Persons in Origins (število različnih), FirstAt, LastAt. Le štetja, brez osebe in naslova, zato berljivo brez pravice sign-in-events. Štejejo se dogodki prijave, kot jih vodi dnevnik: ena uspešna prijava na klicatelja, postopek in izvor na SuccessWindowMinutes |
SignInOrigins | Id | Po lastnem omrežju kot celoti (NetName, Network prazen), sicer po podomrežju (Network, /24 oz. /48), z Country, CountryName, City, Latitude, Longitude, Asn, AsnOrganisation, števili Successes, Refusals, Challenges, Persons ter FirstAt/LastAt |
SignInEvents | Id | Posamezni dogodki, na zahtevo največ 20.000 ujemajočih se, najnovejši najprej. Pogoje za Person, At in Id prehod upošteva že pri branju datoteke dnevnikov, zato meja velja le za ujemajoče se dogodke. Polja: At, Repeats, Method, Scope (data, admin), Alias, Outcome, Reason, Status, Person, KeyId, Presented, Origin, Network, NetClass, NetName, kraj in operater omrežja kot zgoraj ter Region, Client, CorrelationId, Rules, Signals (glejte Podlaga odločitve), Weekday, HourOfDay. Le s pravico sign-in-events, sicer 403 |
SignInFindings | Id | Shranjene ugotovitve pravil prijave, Id naraščajoč in trajen: Rule, RuleVersion, Level (act, ask), At, Person, KeyId, Observed, Usual, BaselineDays, Text, Advice, EventIds (Id dogodkov, na katerih temelji, ločeni z vejico). Person, KeyId, Usual in EventIds le s pravico sign-in-events, sicer prazno. Na zahtevo največ 20.000 |
SignInAdvice | Id | Izstopajoči vzorci zadnjih sedmih dni, izračunani ob branju, Id velja le znotraj ene zahteve: Code, Text, Advice, FromAt, UntilAt, Count, Origin, Country; Person in KeyId le s pravico sign-in-events. Besedilo nikoli ne navaja osebe |
GeoIpFiles | Kind | Na datoteko (City, Asn): DatabaseType, BuildDate, AgeDays, Stale (starejša od StaleDays), Bytes, InstalledAt, Attribution. Brez datotek prazno |
GeoIpSource | Id | Ena vrstica: Source, Account, HasLicenseKey, UpdateDays, LastAttemptAt, LastError, Attribution. Licenčni ključ se nikoli ne vrne |
Vrednosti. Method: apiKey, personalKey, windows, sqlLogin, none. Outcome: success,
refused, challenge (zahteva brez prijavnih podatkov ali vmesni korak prijave Windows; tudi poziv h
kodi 2FA), totpSuccess, totpFailure. NetClass: loopback, private (lastno omrežje,
RFC 1918, enolični lokalni naslovi IPv6, link-local, 100.64.0.0/10), public, unknown. V
SignInHours je Country prazen, kadar država ni znana. Reason (pri refused): notSignedIn,
unknownKey, revoked, expired, rests, personDisabled, outsideKeyNetworks, denied, deniedByCountry (vsako zavrnilno pravilo navaja države),
noPerson, enrolmentOpen, noFactor, secondFactorMissing, sessionExpired, limit,
unprotected (prijava, ki se sprejme le prek zaščitene povezave, je prispela nešifrirana).
Presented navaja podano, neznano ime prijave SQL Server, nikoli ključa. Client je vrsta programa iz
glave User-Agent (Power Query, WinHTTP, PowerShell, Browser ali prva beseda); brez glave
prazno.
Podlaga odločitve
Vsak dogodek prijave, ki ga je ocenil pravilnik prijave, v Rules navede pravila, na katerih je
temeljila odločitev, v Signals pa signale, po katerih je bila ocenjena – oboje kot besedilo JSON.
Dogodek brez veljavnega prvega faktorja (napačen ključ, napačno geslo) pravilnika ne doseže; tam sta
obe polji prazni.
Rules je seznam; prazen ([]), če ni veljalo nobeno pravilo. Vsak vnos navaja:
| Polje | Pomen |
|---|---|
id | Oznaka pravila: njegov Id v SignInRules ali file:n za n-to pravilo konfiguracijske datoteke – to se pojavi le brez skrbniške shrambe, torej nikoli v dogodkih, ki jih bere skrbniški vmesnik. floor označuje spodnjo mejo skrbništva (RequireAdminTotp), ki ni pravilo |
version | Prstni odtis tega, kar pravilo počne: 16 šestnajstiških števk, ki se spremenijo, takoj ko se spremeni del, postopek, učinek, pogoj ali izjema z njenim koncem – ne pa ob zgolj spremenjenem zaznamku. Enaka pravila imajo povsod enako različico |
effect | deny ali requireTotp |
label | Zaznamek pravila ob prijavi |
spared | true, če je izjema pravilo za to prijavo odpravila; sicer manjka |
mode | report za pravilo v preizkusu: ni odločilo ničesar, vnos kaže, kaj bi storilo; pri uveljavljenem pravilu manjka |
exception | Zaznamek izjeme, ki je pravilo odpravila |
Signals navaja, kar je poleg stolpcev dogodka vplivalo na odločitev:
| Polje | Pomen | Zanesljivost |
|---|---|---|
country | Država, po kateri so pravila presojala; manjka, če je bila neznana | opažena, izpeljana iz naslova (VPN in mobilna omrežja jo premaknejo) |
countryAsked | Ali kakšno pravilo navaja države, zato je bila država poiskana | – |
secondFactor | valid (predložena veljavna seja), missing (zahtevan, ni predložen ali je potekel), notRequired, exchange (zahteva odpre sejo ali nastavi faktor), notChecked (prej zavrnjeno) | potrjena |
totpExempt | Ali je osebni ključ izvzet iz 2FA | potrjena |
operator | Operater omrežja, po katerem so pravila presojala (AS3320); manjka, če je bil neznan ali nobeno pravilo ne navaja operaterjev | opažena, izpeljana iz naslova |
client | Vrsta programa, ki jo je navedla zahteva; manjka brez User-Agent | trditev |
trust | Za vsak navedeni signal njegova raven: observed, claimed ali verified (za secondFactor) | – |
Postopek, oseba, ključ in izvor so v stolpcih dogodka (Method, Person, KeyId, Origin,
NetClass, NetName); Client je trditev programa in odloča le, če kakšno pravilo sprašuje po programu. Enake zavrnitve
ene minute dnevnik združi le, če so o njih odločila ista pravila v isti različici. Iščete lahko s contains,
na primer $filter=contains(Rules,'"id":"7"') za vse prijave, pri katerih je sodelovalo pravilo 7.
Pravica sign-in-events. Pravilo mora vir navesti dobesedno, poleg admin; niti * niti sam
admin je ne podelita. Naslov in oseba posamezne prijave sta osebna podatka; pravica loči tiste, ki
vidijo števila in vzorce, od tistih, ki lahko sledijo posameznim osebam. Velja za SignInEvents, za
polja oseb v SignInFindings in SignInAdvice ter za `sign-in-profile`. Brez
pravice so ta polja prazna, še preden se uporabi filter zahteve; pogoj zanje tedaj ne vrne ničesar.
Ugotovitve pravil prijave
Ob vsakem zapisu prehod pravila prijave uporabi na novih dogodkih; kar pravilo zazna, shrani kot
ugotovitev. Ugotovitev se zapiše enkrat in se nikoli znova ne ovrednoti; navaja pravilo z njegovimi
pragovi (RuleVersion) in primerjalno obdobje (BaselineDays), pod katerima je nastala. Isti položaj
– pravilo, izvor ali oseba, ura ali dan – da le eno ugotovitev.
Od zadnjega pogleda. Id raste z vsako ugotovitvijo in se nikoli ne uporabi znova. Program si
zapomni najvišji prebrani Id in nato z $filter=Id gt 4711 sprašuje le po novem. S pogojem za Id
prehod najprej bere najstarejše ujemajoče se ugotovitve; tako program po korakih v celoti prebere
tudi več kot 20.000 novih ugotovitev. Brez takega pogoja vrne najnovejše.
Stopnje. act zahteva ukrepanje: vzorec napada ali predan ključ. ask je vredno vprašanja osebi:
nekaj je zanjo novo ali neobičajno. Kam prehod sporoča ugotovitve, določa
`Gateway:SignInLog:Alerts`.
| Pravilo | Stopnja | Zaznano, ko |
|---|---|---|
failureWave | act | vsaj 20 zavrnjenih prijav z enega naslova v eni uri |
spray | act | zavrnitve za vsaj 5 različnih imen ali ključev z enega naslova v eni uri |
distributed | act | zavrnitve za isto ime z vsaj 10 naslovov v eni uri |
impossibleTravel | act | dve uspešni prijavi iste osebe vsaj 500 km narazen, hitreje kot 1000 km/h |
keyManyOrigins | act | en osebni ključ iz vsaj 5 javnih omrežij v enem dnevu |
newCountry | ask | država, iz katere se oseba v prejšnjih 90 dneh ni prijavila |
newClient | ask | vrsta programa, ki je oseba v prejšnjih 90 dneh ni uporabila |
newNetworkOperator | ask | operater omrežja, prek katerega se oseba v prejšnjih 90 dneh ni prijavila |
newMethod | ask | postopek prijave, ki ga oseba v prejšnjih 90 dneh ni uporabila |
unusualHour | ask | ura, ob kateri in ob sosednjih urah se oseba v prejšnjih 90 dneh ni nikoli prijavila |
Pravila za novosti se sprožijo šele, ko je imela oseba v prejšnjih 90 dneh vsaj 5 uspešnih prijav,
unusualHour šele od 20; prej bi bilo vse novo. Dnevi in ure se štejejo v časovnem pasu
Gateway:SignInLog:TimeZone. Observed je opažena vrednost (država, število, razdalja), Usual so
za primerjavo običajne vrednosti osebe. Besedilo ugotovitve nikoli ne navaja osebe.
Profil prijav
sign-in-profile pokaže, kaj je za osebo pri prijavi običajno – na primer, da lahko ovrednotite ugotovitev
newCountry. Telo:
{ "person": "Frank Mustermann", "days": 365 }
days šteje nazaj od danes, vključno z današnjim dnem, v časovnem pasu Gateway:SignInLog:TimeZone;
privzeto 90, dovoljeno od 1 do 3650. Odgovor navede person, days, from, until, total
(uspešne prijave) in activeDays ter pod dimensions za vsako značilnost – country, network,
operator, client, method, hour (ura od 00 do 23) – vrednosti z value, count, firstDay
in lastDay, najpogostejše najprej. Izsek:
{ "person": "Frank Mustermann", "days": 365, "from": "2025-10-21", "until": "2026-10-20",
"total": 1184, "activeDays": 213,
"dimensions": { "country": [ { "value": "DE", "count": 1170, "firstDay": "2025-10-21", "lastDay": "2026-10-20" },
{ "value": "IT", "count": 14, "firstDay": "2026-07-28", "lastDay": "2026-08-08" } ] } }
Upoštevane so le uspešne prijave. Profil izhaja iz dnevnih vrednosti posamezne osebe, ki v datoteki
dnevnikov ostanejo dlje od posameznih dogodkov. Zahteva pravico sign-in-events (sicer 403) in
vedno velja za natanko eno osebo; seznama po osebah ni. Neznana oseba: 404; days zunaj obsega:
400.
set-geoip-source. Telo:
{ "source": "maxmind", "account": "123456", "licenseKey": "…", "updateDays": 7 }
source je obvezen: none (datoteke le prek upload-geoip), dbip-lite ali maxmind. updateDays
od 0 do 90: po toliko dneh prehod datoteke sam prenese znova (0 = le na ukaz); po neuspelem
poskusu poskusi znova čez šest ur. licenseKey se shrani zapečaten z glavnim ključem; če ga v telesu
ni, ostane shranjeni, "removeLicenseKey": true ga odstrani. maxmind brez številke računa ali
licenčnega ključa: 422. Dnevnik sprememb navede le, ali je ključ nastavljen.
update-geoip. Brez telesa. Prenese obe datoteki in ju začne uporabljati brez ponovnega zagona.
Odgovor je files, vsak z kind, databaseType, buildDate, bytes, changed, attribution;
datoteka z enakim datumom izdelave kot obstoječa ostane nespremenjena (changed: false). Zavrnjeno z
422 in razlogom: vir ni izbran, vir zavrne ali ne dostavi ničesar, datoteka ni uporabna ali prenos
že poteka.
upload-geoip. Telo je datoteka sama (.mmdb, .mmdb.gz ali .tar.gz podjetja MaxMind),
Content-Type: application/octet-stream. Možnosti poizvedbe: source=dbip-lite|maxmind določi
navedbo vira, force=true sprejme tudi starejšo ali enako staro datoteko. Vrsto (City, Asn)
prehod prepozna po vsebini. Odgovor je kot en vnos update-geoip. Večja od GeoIp:MaxMegabytes:
429 (LIMIT_EXCEEDED) kot vsako preveliko telo; neuporabna ali starejša od obstoječe: 422.
Viri geolokacijske zbirke
| Vir | Pridobivanje | Licenca in navedba vira |
|---|---|---|
dbip-lite | DB-IP Lite, mesečno, brez računa; prehod prenese dbip-city-lite-LLLL-MM.mmdb.gz in dbip-asn-lite-LLLL-MM.mmdb.gz z download.db-ip.com (v začetku meseca po potrebi prejšnji mesec) | CC BY 4.0; navedba vira obvezna: „IP Geolocation by DB-IP (https://db-ip.com)“ |
maxmind | MaxMind GeoLite2 City in ASN s številko računa in licenčnim ključem brezplačnega računa MaxMind | licenca GeoLite2 podjetja MaxMind; obvestilo „This product includes GeoLite2 data created by MaxMind“ |
Navzven prehod pošlje le zahtevo za prenos datotek; naslovi klicateljev strežnika nikoli ne zapustijo.
Dnevnik obremenitve
Dnevnik obremenitve beleži, koliko stane vsaka oblika zahteve (nastavitve pod
`Gateway:LoadLog`, postopek v
Ugotavljanje, kaj obremenjuje prehod in podatkovno zbirko).
Oblika je zahteva brez svojih vrednosti: pot, alias, vrsta, objekt, primerjana polja, razvrstitev
in okno, vsaka vrednost zapisana kot ?. Zahteve, ki se razlikujejo le po vrednostih, so ena
oblika. Prehod zbrane številke zapiše enkrat na minuto v
datoteko dnevnikov, zato se zahteva v
množicah pojavi do minute pozneje. Vse množice so samo za branje. LoadFindings bere shranjene
namige, druge množice se izračunajo ob branju.
| Množica | Ključ | Vsebina |
|---|---|---|
LoadShapes | Id | Po obliki za zadnjih sedem dni: Path, Alias, Kind, Resource, Text (oblika), Template (ustvarjeni stavek brez vrednosti), FirstAt, LastAt, Requests, TotalMs, AverageMs, P95Ms, MaxMs, DataMs, Rows, AverageRows, Bytes, Errors, Refused, Persons, Advice (kode iz LoadAdvice, ločene z vejico) |
LoadHours | Hour, ShapeId | Po uri (UTC, na polno uro) in obliki: Requests, TotalMs, DataMs, MaxMs, P95Ms, Rows, Bytes, Errors, Refused, poleg tega Weekday (1 = ponedeljek) in HourOfDay po uri strežnika. Brez osebe; hrani se HourDays dni |
LoadPersons | Day, ShapeId, Person | Po dnevu (UTC), obliki in klicatelju: Requests, TotalMs, Rows. Le s pravico load-persons, sicer 403; hrani se PersonDays dni |
SlowRequests | Id | Posamezne zahteve od SlowMilliseconds naprej, najnovejših 20.000: At, ShapeId, Ms, DataMs, Rows, Bytes, Status, CorrelationId; Person in KeyId le s pravico load-persons, sicer prazno. Hrani se SlowDays dni |
LoadFindings | Id | Namigi iz LoadAdvice, shranjeni enkrat na uro, Id naraščajoč in trajen: At (kdaj je namig nastal), Code, ShapeId, Alias, Resource, Text, Advice, Requests in AverageDataMs (številke sedmih dni, na katerih temelji). En namig na kodo in obliko; oblika, ki ostane draga, se ne pojavi znova. Brez osebe. Na zahtevo največ 20.000; Id gt kot pri ugotovitvah pravil prijave |
LoadAdvice | Id | Oblike zadnjih sedmih dni z znanim ukrepom, izračunane ob branju, Id velja le znotraj ene zahteve: Code, ShapeId, Alias, Resource, Text, Advice, Requests, AverageDataMs. Besedilo nikoli ne navaja osebe |
Vrednosti. Path: odata (površina OData), cf (lastni vmesnik HTTP pod /api/v1/cf/), checked
(preverjeni stavek), passthrough (stavek s pravico sql), admin (skrbništvo), other (2FA,
samopostrežba, prenosi). Kind: read, count, aggregate, call, insert, update,
delete, statement, describe (stavek le opisan), service (zahteva brez podatkov: metapodatki,
zavrnitev, skrbništvo). Besedilo stavka prehod hrani brez literalov in komentarjev; dolgi seznami
vrednosti se strnejo v ?, …. Preskočene vrstice ($skip) se v Text pojavijo le kot stopnja,
nikoli s svojim številom: skip=small (pod 1.000), skip=medium (pod 10.000), skip=large (od
10.000 naprej).
Časi in količine. TotalMs je celoten čas zahteve v prehodu, DataMs del od odprtja povezave
do podatkovnega vira do zadnje prebrane vrstice, vključno s preklopom na identiteto osebe.
- percentil (
P95Ms) je zgornja meja časovne stopnje, v katero pade (stopnje 5, 10, 25, 50, 100,
250, 500, 1.000, 2.500, 5.000, 10.000, 30.000 ms; nad tem MaxMs). Bytes šteje odgovor pred
stiskanjem. Errors šteje odgovore 5xx, Refused odgovore 4xx. Person je ime osebe, brez
osebe pa oznaka klicatelja, kot je v revizijski sledi. Vsote časa, vrstic in bajtov so števila s
plavajočo vejico, da program, kot je Access, ki cela števila bere kot 32-bitna, ne prekorači obsega.
Namigi (LoadAdvice). Vsaka koda je vzorec, ki obremenjuje podatkovno zbirko ne glede na
podatke:
| Koda | Prepoznana, ko | Običajni ukrep |
|---|---|---|
wholeSet | Branje brez filtra vrne v povprečju vsaj 1.000 vrstic na zahtevo | Nastavite filter, izberite le potrebne stolpce |
unindexedFilter | Filter na tabeli z vsaj 10.000 vrsticami (ocena kataloga), noben primerjani stolpec ni prvi v indeksu | Ustvarite indeks s prvim stolpcem filtra ali filtrirajte po indeksiranem stolpcu |
deepPaging | $skip od 10.000 vrstic naprej | Omejite s filtrom ali berite naprej prek povezave na naslednjo stran |
countLarge | Skupno število ($count) s povprečno vsaj 500 ms v podatkovni plasti | Skupno število zahtevajte le, kadar ga potrebujete |
aggregateWhole | Vsote brez filtra s povprečno vsaj 500 ms v podatkovni plasti | Omejite množico ali vsote vnaprej izračunajte v podatkovni zbirki |
expensiveStatement | Lastni stavek s povprečno vsaj 1.000 ms v podatkovni plasti ali 95. percentilom od 2.500 ms naprej | Preverite ga v Query Store; shranite ga kot proceduro ali indeksiran pogled |
refreshLoop | Ista oblika vsaj 600-krat v eni uri, od največ treh klicateljev | Preverite samodejno osveževanje |
Pravica load-persons. Pravilo mora vir navesti dobesedno, poleg admin; niti * niti sam
admin je ne podelita. Obremenitev po osebah kaže, kdo je kdaj koliko delal; pravica loči tiste,
ki vidijo obremenitev prehoda, od tistih, ki lahko primerjajo osebe.
export-load. Telo ni obvezno:
{ "days": 30 }
days od 1 do HourDays, privzeto 30. Odgovor je datoteka JSON wkl-load-LLLLMMDD-hhmmss.json v
obliki wkl-load-export/1 s shapes, hours, advice in mejami časovnih stopenj
(histogramBounds). Vsebuje imena aliasov, objektov in stolpcev, ne pa oseb, ključev, naslovov,
korelacijskih oznak in vrednosti; dnevne številke po osebah in posamezne počasne zahteve se zanjo
sploh ne berejo. Potrebna je pravica branja skrbništva; izvoz se zabeleži v dnevniku sprememb.
Iskanje oblike v SQL Serverju
Prehod vsak stavek, ki ga ustvari sam, označi z oznako njegove oblike kot komentarjem za prvo
ključno besedo, na primer SELECT /* wkl:5b9b83f10953 */ TOP (1) … ali
UPDATE /* wkl:8b7d7b280081 */ [dbo].[Probe] SET …. Na tem mestu komentar ohrani tudi Query Store,
ki komentarja pred stavkom ali za njim ne shrani. Pri klicu procedure stoji oznaka pred klicem;
Query Store tedaj zabeleži stavke procedure brez oznake. S to oznako skrbnik podatkovne zbirke najde
obliko v predpomnilniku načrtov, v Query Store ali v Extended Events in od tam pride do
LoadShapes. Preverjeni stavki prav tako nosijo oznako; stavek s pravico sql se izvede
nespremenjen, brez oznake. Povezave se SQL Serverju predstavijo kot Wkl.Data.Gateway
(program_name), razen če niz povezave podatkovnega vira nastavi lastno Application Name.
Posodobitve podatkovnih zbirk
Modul za posodobitve v storitvi namešča podpisane posodobitve podatkovnih zbirk (pakete <izdelek>-schema-<različica>.zip) v podatkovne zbirke, za katere ima mapa
`Gateway:Updates` zaščiteno konfiguracijo. Na vsakih
PollSeconds sekund preveri pakete v vhodni mapi, katerih kopiranje se je končalo vsaj pred 5
sekundami, in napovedane pakete, katerih rok je potekel. Ukazi prikažejo stanje in izvedejo odločitve
skrbnikov.
Pravice. update-databases, update-status in update-history berejo (zadošča pravilo z
admin, tudi samo za branje). Vsaka odločitev potrebuje pravico za spreminjanje in se zapiše v dnevnik
sprememb s podatkovno zbirko, paketom in izidom.
update-databases. Brez telesa. Podatkovne zbirke z zaupanja vredno konfiguracijo in njihove
nastavitve ter datoteke, ki jih modul izpusti:
{
"folder": "C:\\ProgramData\\Wkl.Data.Gateway\\updates",
"databases": [ {
"id": "demo-prod", "gatewayAlias": "demo", "product": "Demo", "dialect": "sqlserver",
"connection": { "string": "Server=sql01;Database=Demo;User ID=wkl_update;Encrypt=True",
"secret": "file:C:\\ProgramData\\Wkl.Data.Gateway\\secrets\\demo-update.txt" },
"keys": [ "9c0f6d1e…" ],
"inbox": "D:\\Updates\\Demo", "archive": "D:\\Updates\\Demo-Archiv",
"backup": { "mode": "native", "target": "D:\\Sicherung" }, "starterSource": null,
"settings": { "expand": "automatic", "contract": "confirm", "noticeMinutes": 60, "sessionWindowMinutes": 15 }
} ],
"problems": [ { "file": "alt.json", "code": 9, "message": "…" } ]
}
| Polje | Vsebina |
|---|---|
id | Ključ podatkovne zbirke v vseh drugih ukazih (database) |
connection.string | Povezava za spremembe strukture in varnostne kopije, brez gesla |
connection.secret | Sklic na geslo (env:IME ali file:POT); vrednost se nikoli ne vrne |
keys | Ključi izdajateljev kot prstni odtis SHA-256 |
settings | Nastavitve delovanja: expand in contract (automatic ali confirm), čas vnaprejšnje napovedi (noticeMinutes), časovno okno, v katerem zahteva prek storitve šteje kot odprta seja (sessionWindowMinutes). Spremenite jih v množici `UpdateSettings`; veljajo od naslednjega prehoda. Če jih ni mogoče prebrati, podatkovna zbirka čaka, namesto da bi delovala s privzetimi vrednostmi |
problems | Izpuščene datoteke s kodo in razlogom; 9 pomeni, da ni zaupanja vredna (spreminjajo jo lahko tudi drugi, ne le skrbniki in SYSTEM, geslo v povezavi, manjka connection.secret, ime datoteke ≠ id) |
update-status. Telo { "database": "demo-prod" }. Odgovor je objekt stanja posodobitev
podatkovnih zbirk (oblika 2), enak kot pri wkl-db status --json:
{
"format": 2, "id": "demo-prod", "product": "Demo", "schema": 13,
"packages": [ { "id": 41, "file": "Demo-schema-14.zip", "schema": 14, "kind": "contract",
"status": "announced", "reason": null, "message": null, "deadlineUtc": "2026-11-02T18:00:00Z" } ],
"sessions": [ { "product": "Demo", "version": "2.3.1", "path": "gateway", "host": "10.1.2.17", "user": "FIRMA\\mustermann", "lastSeenUtc": "2026-11-02T16:40:12Z" } ],
"drift": []
}
packages vsebuje pakete, ki niso nameščeni (done) ali opuščeni (dismissed): waiting (čaka
na potrditev), announced (napoved teče, deadlineUtc je rok), running, failed, refused.
reason je koda, ki pojasni stanje (glejte spodaj). sessions navede seje starejših aplikacij, ki
zadržijo napovedani paket, in seje brez navedbe izdelka in različice, ki ga ne zadržijo; seje, ki potekajo prek storitve, storitev prepozna po glavi
`X-Wkl-Application`. drift
navede objekte, ki so bili od zadnjega paketa spremenjeni zunaj paketa, vsak vnos z object (ime s
shemo), type (vrsta objekta, na primer table ali view) in change (changed, missing;
dateChanged je pri šifriranem modulu samo namig in ne zadrži nobenega paketa).
update-history. Telo { "database": "demo-prod", "skip": 0, "take": 20 } (take od 1 do 100,
privzeto 20). Zaključeni paketi (done, failed, refused, dismissed), najnovejši najprej, z
id, file, schema, kind, status, reason, message, receivedUtc, confirmedBy,
confirmedUtc, sha256 in steps: za vsak korak phase (predeploy, pre, model, post,
postdeploy, baseline), version, path, sha256, appliedUtc, appliedBy, durationMs,
result (ok, failed, rolledback) in message.
Odločitve. Telo { "database": "demo-prod", "package": 41 }; package je številka (id) iz
stanja ali zgodovine.
| Ukaz | Za stanje | Učinek |
|---|---|---|
confirm-update | waiting | expand: se izvede takoj. contract: se preveri in napove (obvestilo aplikacijam, rok po času napovedi paketa ali noticeMinutes) in se izvede ob roku, ko ni več odprta nobena starejša aplikacija. Kot potrditelj se v podatkovno zbirko zapiše gateway:<ime> (<oznaka>) |
dismiss-update | failed, refused | Postane dismissed in izgine iz stanja; datoteka ostane v mapi failed |
retry-update | failed, refused | Nespremenjeno datoteko iz failed znova sprejme kot nov paket, z vsemi preverjanji; stari paket postane dismissed. Spremenjeni paket potrebuje novo datoteko |
move-update-deadline | announced | V telesu še "deadlineUtc": "2026-11-03T06:00:00Z"; ne v preteklosti. Aplikacije preberejo novi rok ob naslednji poizvedbi |
cancel-update-notice | announced | Prekliče napoved; paket znova čaka (reason 7) in potrebuje novo potrditev, tudi pri contract = automatic |
upload-update. POST /admin/v1/upload-update?database=demo-prod&file=Demo-schema-14.zip, telo
je datoteka ZIP, največ 64 MiB. Storitev jo postavi v vhodno mapo in jo takoj sprejme, kot datoteko,
odloženo tja. Ime datoteke je samo ime brez poti.
Odgovor na odločitev ali nalaganje. message opiše, kaj se je zgodilo; package navede, kaj se je zgodilo s paketom, če se je izvedel ali bil napovedan (sicer null):
{ "message": "Angekündigt bis 2026-11-02 18:00:00Z.",
"package": { "file": "Demo-schema-14.zip", "exitCode": 0, "outcome": "announced", "message": "Angekündigt bis 2026-11-02 18:00:00Z." } }
outcome je done (nameščen, datoteka je v arhivu in v done), announced, waiting (še čaka,
na primer na potrditev ali na seje) ali failed (zavrnjen ali neuspel, datoteka je v failed).
exitCode in reason uporabljata iste kode:
| Koda | Pomen |
|---|---|
0 | V redu |
2 | Paket neveljaven ali ni zaupanja vreden (podpis, kontrolna vsota, izdajatelj, izdelek, vrsta) |
3 | Podatkovna zbirka ne ustreza: višja različica sheme ali lastni objekti brez zgodovine |
4 | Skript ali načrt uvedbe ni uspel; vse je razveljavljeno |
5 | Varnostno kopiranje ni uspelo |
6 | Seje starejših aplikacij so še odprte |
7 | Čaka na potrditev; sporočilo navede razlog |
10 | Drug postopek ta trenutek namešča paket tega izdelka |
11 | Odstopanje: objekt je bil spremenjen zunaj paketa |
12 | Migracije se ne ujemajo z zgodovino (kontrolna vsota, manjkajoča ali prestara migracija) |
13 | Izvedba načrta bi lahko povzročila izgubo podatkov |
| Odgovor | Pomen |
|---|---|
404 | Ni podatkovne zbirke s tem id ali paketa s to številko |
409 | Paket ima drugo stanje, kot ga ukaz potrebuje; pri ponovnem poskusu datoteke v failed ni več ali je bila spremenjena; pri nalaganju isti paket že čaka |
400 | Manjka obvezno polje, ime datoteke s potjo, rok v preteklosti |
413 | Datoteka je večja od 64 MiB |
503 | Modul ta trenutek namešča paket (poskusite znova čez kratek čas) ali podatkovna zbirka ni dosegljiva |
Veliko dejanj naenkrat
Skupnega klica ni: niti OData $batch niti ukaza za več oseb ali ključev. Vsaka oseba, vsaka dodelitev,
vsak ključ je lastna zahteva.
| Vprašanje | Vedenje |
|---|---|
| Koliko zahtev zaporedoma | Skrbništvo šteje kot vsaka druga zahteva v omejitev hitrosti klicatelja: Gateway:Security:RateLimit:PerCaller (privzeto 300) na RateLimit:WindowSeconds (privzeto 60), glejte konfiguracijo. Nad tem prehod odgovori z 429; po izteku obdobja se nadaljuje. Lastne omejitve samo za skrbništvo ni |
| Delne napake | Vsaka zahteva je lastna transakcija. Če 300. zahteva ne uspe, ostane 299 prejšnjih shranjenih; nič se ne razveljavi. Klicatelj nadaljuje pri neuspeli |
| Ponovitev po prekinitvi povezave | Z glavo Idempotency-Key tudi tukaj: učinkuje pri vsaki metodi razen GET in HEAD, torej tudi pri ustvarjanju prek OData in pri ukazih. Pravila in hrambo (10 minut, samo v pomnilniku, 401/429/5xx se ne shranijo) opisuje Ponovljene pisalne zahteve |
| Ponovitev po ponovnem zagonu ali po več kot 10 minutah | Brez shranjenega odgovora. Prej preverite, ali zapis že obstaja: drugo osebo z enakim imenom prehod zavrne, drugi ključ pa bi dejansko nastal |
Primer izračuna: 847 oseb z ustvarjanjem, dodelitvijo pravila in ključem je dobrih 2.500 zahtev, s
privzeto vrednostjo torej najmanj devet minut. Če potrebujete več, za čas nastavitve zvišajte
PerCaller.
Temu delu se pogosto lahko izognete. Osebe potrebujete le za tiste, ki dobijo osebne ključe, 2FA ali
lastno privzeto identiteto. Pravice in pravila prijave je mogoče dodeliti skupini Windows kot
celoti (WindowsAccounts, IdentityAssignments, značilnost windowsGroups pravil prijave), ne da bi
njene člane vpisali posamično. 2FA pa ima vedno posamezna oseba: če pravilo zahteva 2FA za skupino,
je vsak član brez vnosa osebe zavrnjen z 403
(glejte Prijava).
Člani skupine Windows
Prehod ne vrača seznamov članov. Imenika Active Directory nikoli ne poizveduje: katere skupine
ima klicatelj, razbere ob prijavi iz njegove prijave Windows, imena pa ob shranjevanju razreši le v
SID. Če želite vse člane skupine ustvariti kot osebe, jih preberite sami, na delovni postaji ali v
skriptu (na primer Get-ADGroupMember oz. net group /domain), in nato za vsakega člana ustvarite
osebo z WindowsAccount. Poznejših sprememb članstva prehod pri tem ne prevzame samodejno; pravice, podeljene prek same skupine, pa članstvu sledijo brez dodatnega vzdrževanja.
Sorodne teme
- „Priročnik za skrbnike aplikacije WKL Database Gateway Manager“