Barvna shema: Svetla
Trenutno dejavna stran: start » sl » Dokumentacija » Integracija podatkov in dostop do podatkov » WKL Database Gateway » Referenčni priročnik » Posredovanje identitete in identitete podatkovne zbirke

Posredovanje identitete in identitete podatkovne zbirke

Pravila in odgovori, ko prehod izvaja stavke pod prijavo osebe (Impersonate) ali dodeljene skupne prijave. Model pojasnjuje Prijava in posredovanje identitete.

Sintaksa

"Databases": [
  { "Name": "fachdaten", "Provider": "sqlserver", "ConnectionString": "…",
    "Persons": "Impersonate",       // Service | Impersonate; privzeto Service
    "DenyImpersonate": [
      { "Logins": [ "sa", "FIRMA\\Datenbankbetrieb" ] },                 // nikoli
      { "Roles": [ "sysadmin" ], "ExceptFrom": [ "192.168.0.0/16" ] }    // sysadmini samo iz lastnega omrežja
    ] }
],
"Security": {
  "AuthMode": "ApiKey, Windows",
  "TrustedProxies": [ "10.0.0.5" ]  // samo od tod se X-Forwarded-For upošteva
}

Prijava aliasa za to v SQL Serverju potrebuje:

GRANT IMPERSONATE ANY LOGIN TO [<prijava aliasa>];
-- dodatno mogoče, glejte spodaj: DENY IMPERSONATE ON LOGIN::[sa] TO [<prijava aliasa>];

Parametri

Pravila posredovanja

PraviloRazlog
Pravila prehoda (Clients) ostanejo zunanja pregrada; znotraj odloča SQL ServerPrehod določa, kateri aliasi, vrste virov in metode HTTP so prek HTTP sploh dosegljivi; dovoljenja za posamezne objekte pozna SQL Server
EXECUTE AS LOGIN, ne EXECUTE AS USEROseba v SQL Serverju nastopa s svojo prijavo kot pri neposredni povezavi – na ravni strežnika, ne le v eni podatkovni zbirki, in z eno prijavo na osebo namesto enega uporabnika na osebo in podatkovno zbirko
EXECUTE AS s piškotkom (cookie), na koncu vsake zahteve povrnjen; če povrnitev ne uspe, se povezave aliasa zavržejoPovezava iz bazena ne sme prenesti konteksta osebe v naslednjo zahtevo: SQL Server takšno sejo ob naslednji uporabi konča, zahteva, ki jo prevzame, pa ne uspe (596). Piškotek prepreči, da bi se prepuščeni stavek z REVERT vrnil na prijavo aliasa
ORIGINAL_LOGIN() še naprej navaja prijavo aliasaTo je povezava, ki dejansko obstaja; v revizijski sledi SQL Serverja (SQL Server Audit) po njej prepoznate prehod
Lastni stavki tečejo z dovoljenji osebekot pri neposredni povezavi
Prijavo prehod najde prek SID prijave WindowsTako jo najde, tudi če se njeno ime ne ujema več z računom. Preklopiti nanjo pa SQL Server takrat ne more: shranjeno ime poskuša razrešiti prek sistema Windows, kar ne uspe (15404, koda Windows 0x534, tudi pod računom sysadmin). Po preimenovanju računa Windows je zato treba preimenovati tudi prijavo: ALTER LOGIN [FIRMA\alt] WITH NAME = [FIRMA\neu]
Račun Windows brez lastne prijave je zavrnjen in se ne izvede pod ServiceTiho preklapljanje nazaj bi mu dalo dovoljenja računa storitve. Izjema: oseba z osebnim ključem, ki nima vpisane prijave SQL Server, teče pod prijavo aliasa, s svojim imenom v kontekstu seje
Če osebi manjka dovoljenje, prehod odgovori z 403Tako, kot SQL Server zavrne neposredno povezavo. Pod Service ostane manjkajoče dovoljenje 422: tam gre za vrzel v zgradbi prehoda, ne za odločitev o osebi
Na katero prijavo prehod ne preklopi, odloča samo seznam DenyImpersonate aliasa. Velja za vsak preklop (EXECUTE AS), ne pa za prijavo s prijavo SQL Server prek HTTP Basic: tam prehod odpre lastno povezavo z imenom in geslom, odloča pa samo SQL Server. Kdor želi tam izključiti na primer sa, v SqlLogins navede le določene prijave namesto * ali jih zaklene v SQL ServerjuSeznam je v konfiguraciji in je edino mesto, kjer je to določeno. Velja na vsakem aliasu, tudi pod Service: identiteta podatkovne zbirke tam prav tako preklopi na prijavo. Vnos navaja prijave (ime, kot ga vodi SQL Server, ali SID) ali strežniške vloge, poleg tega po izbiri omrežja, iz katerih ne velja (ExceptFrom) ali iz katerih edino velja (From). Kar ne zadene noben vnos, se sprejme kot pri neposredni povezavi, tudi z visokimi pravicami; skritega pravila poleg tega ni
Če vnos velja, se zahteva zavrne (403); vrstni red ne odloča ničesarIzjeme so v samem vnosu, ne v posebnih dovoljevalnih vnosih – sicer bi bil rezultat odvisen od vrstnega reda, čemur se preostala konfiguracija iz istega razloga izogiba
Imena in SID se preverijo pred preklopom, vloge po njem v novem kontekstuVloge prijave zanesljivo pokaže šele njen kontekst (IS_SRVROLEMEMBER). Če velja vnos vloge, se preklop takoj povrne in zahteva zavrne
Izvor je naslov sogovornika; X-Forwarded-For šteje samo, če pride z naslova iz Security:TrustedProxiesSicer bi vanj vsakdo vpisal naslov iz lastnega omrežja. Bere se od najbližjega člena: velja prvi naslov, ki sam ni zaupanja vreden posrednik – vnos, ki ga odjemalec vpiše spredaj sam, tako ne šteje. Če podatka ni mogoče prebrati, je izvor neznan; neznan izvor ne odpravi nobene zavrnitve. Naslovi IPv4 v zapisu IPv6 (::ffff:192.168.1.5) se prevedejo nazaj na IPv4. „Interneta“ prehod ne pozna, le „zunaj navedenih omrežij“
Omrežja se berejo strogo: naslov IPv4 potrebuje štiri desetiške dele brez vodilne ničle, za dolžino predpone pa ne sme biti nastavljen noben bit.NET bere 192.168 kot 192.0.0.168, 0x7f.0.0.1 kot 127.0.0.1, 017.0.0.1 kot 15.0.0.1 in iz 192.168.1.5/16 brez opozorila naredi 192.168.0.0/16. Vsako od teh branj bi neopazno spremenilo, kaj pravilo zajame; preverjanje ob zagonu jih zato zavrne. Pravilo velja enako za TrustedProxies, From, ExceptFrom, omejitve osebnih ključev in setup-host --networks
Zunaj prehoda dodatno mogoče: DENY IMPERSONATE v SQL Serverju za iste prijaveTo drži tudi, če je prehod sam ogrožen: z IMPERSONATE ANY LOGIN lahko njegova prijava sicer prevzame katero koli prijavo, tudi prijavo sysadmin; DENY to prepreči

Odgovori pri zavrnitvi ne navajajo pravila; kateri vnos je veljal, za koga in iz katerega izvora, je kot opozorilo zapisano v dnevniku storitve pod korelacijsko oznako.

Odgovor (403)Pomen
„Für dieses Windows-Konto gibt es in SQL Server keine eigene Anmeldung.“ (Za ta račun Windows v SQL Serverju ni lastne prijave.)Oseba nima lastne prijave, le dostop prek skupine, ali pa sploh nobenega
„Diese Anmeldung darf über den Dienst nicht verwendet werden.“ (Te prijave prek prehoda ni dovoljeno uporabiti.)Velja vnos iz DenyImpersonate – po imenu, SID ali vlogi
„Der Dienst kann diese Anmeldung in SQL Server nicht annehmen.“ (Prehod te prijave v SQL Serverju ne more prevzeti.)SQL Server zavrne preklop: na primer manjka IMPERSONATE ANY LOGIN, prijava je onemogočena ali pa je bil račun Windows preimenovan (15404)
„Die Datenbank verweigert dieser Anmeldung den Vorgang.“ (Podatkovna zbirka tej prijavi zavrne dejanje.)Osebi manjka dovoljenje (napaka 229, 230, 262, 297, 300 ali 916)

Identitete podatkovne zbirke (skupne prijave)

V mnogih namestitvah osebe v podatkovni zbirki nimajo lastnih dovoljenj. Delajo prek skupne prijave za oddelek, na primer vertrieb ali marketing, katere geslo poznajo vsi. Kdo spada h kateri prijavi, odloči stranka. Prehod to preslika v skrbniško shrambo: vsaka oseba se prijavi kot ona sama, prehod pa zanjo preklopi na skupno prijavo. Gesla skupne prijave pri tem nihče ne potrebuje.

Dve množici skrbniškega vmesnika:

MnožicaVsebina
DatabaseIdentitiesZa vsak vir podatkov identitete, pod katerimi sme teči zahteva, vsaka pod imenom, s katerim oseba izbira (ROLE= gonilnika). Ime je za vsak vir podatkov enolično. Kind določa, kot kdo teče zahteva: Login z EXECUTE AS LOGIN preklopi na skupno prijavo v Login; Own preklopi na lastno prijavo osebe (prijava Windows njenega računa oz. SqlLogin njenega vnosa); Alias ostane pri prijavi vira podatkov
IdentityAssignmentsKdo sme prevzeti identiteto: natanko en vir na vrstico – oseba (PersonId), račun Windows ali skupina Windows (WindowsAccount, ob shranjevanju razrešen v SID) ali posamezen osebni ključ (KeyId)

Identiteta in dodelitev imata vsaka stikalo Enabled. Oseba ima dodatno privzeto vrednost (DefaultRole v Persons).

Katera identiteta velja – za vsako zahtevo, takoj ko je alias znan:

OkoliščinaRezultat
Nobena dodelitev ne zadene prijaveOdloča nastavitev Persons aliasa
Zahteva izbere (glava X-Wkl-Role, sicer identiteta, vezana na sejo 2FA)Izbrana, če je dodeljena; sicer 403 s seznamom mogočih
Dodeljena natanko enata
Več, brez izbire, privzeta vrednost osebe je med njimiprivzeta vrednost
Več, brez izbire, brez ustrezne privzete vrednosti403; odgovor navede mogoče identitete v X-Wkl-Roles in v sporočilu

Dodelitev zadene prek osebe, ki ji prijava pripada (prek ključa ali njenega lastnega računa Windows), prek samega ključa ali prek računa Windows in vsake njegove skupine. Imena v X-Wkl-Role in X-Wkl-Roles so odstotno kodiran UTF-8 (Au%C3%9Fendienst); seznam je ločen z vejicami.

PraviloRazlog
Pri več identitetah ni vrstnega reda; brez izbire in privzete vrednosti prehod zavrneČe bi prehod identiteto ugibal, bi se stavki izvajali z dovoljenji, ki jih oseba ni izbrala
Vsaka izbira se pri vsaki zahtevi preveri glede na dodelitve; tuja izbira je 403Izbira ni pooblastilo, le izbor med podeljenimi
Ključ storitve in prijava SQL Server prek Basic ne prevzameta identitete; izbira se zavrneKljuč storitve ni oseba; prijava SQL Server se poveže kot ona sama
DenyImpersonate velja za skupne prijave enako kot za osebeSeznam je edino mesto, ki prijavo izloči iz dosega prehoda
Oseba ostane vidna: SESSION_CONTEXT(N'wkl.person') jo navede, SESSION_CONTEXT(N'wkl.role') izbrano identiteto, wkl.key ključUSER_NAME() in SUSER_SNAME() navedeta skupno prijavo, ORIGINAL_LOGIN() prijavo vira podatkov. Za prijavo Windows brez vnosa osebe je v wkl.person račun
Revizijska sled navaja oboje: Zugriff GET fachdaten/dbo.Auftrag durch Erika Muster (k…) als vertriebKdo je ravnal in pod katero identiteto. Omejevanje hitrosti šteje po klicatelju: po osebnem ključu (ne po osebi), po računu Windows, po prijavi SQL Server v zapisu zahteve; ne po identiteti
Dodelitve se poiščejo pri vsaki zahteviIzklop ali brisanje učinkuje z naslednjo zahtevo
Oseba brez lastne prijave, ki izbere Own, je zavrnjenaBrez tihega povratka na prijavo vira podatkov

Preverjanje ob shranjevanju. Vklopljeno identiteto vrste Login prehod shrani šele po preizkusnem preklopu: odpre povezavo vira podatkov, preklopi na prijavo in preklop takoj povrne. Zavrne jo z 422 in sporočilom za skrbništvo, če prijava manjka (ali je skupina Windows), če jo navaja vnos iz DenyImpersonate – ob shranjevanju šteje vsak vnos, tudi tisti z omrežnim pogojem –, če pripada tam navedeni strežniški vlogi, če nima dostopa do podatkovne zbirke vira podatkov ali če SQL Server preklop zavrne (na primer ker manjka IMPERSONATE). Prijava vira podatkov za to v SQL Serverju potrebuje:

GRANT IMPERSONATE ON LOGIN::[vertrieb] TO [<prijava vira podatkov>];   -- za vsako skupno prijavo

Same skupne prijave in njihova dovoljenja stranka ustvari v SQL Serverju; prehod jih ne upravlja. Skupna prijava, ki si jo osebe delijo prek Basic s skupnim geslom, ni priporočljiva: prehod oseb takrat ne more razlikovati.

Odjemalci. Gonilnik ODBC za OData (Wkl.Data.OData.Odbc) izbira s ključno besedo ROLE= ali – kjer aplikacija dovoli pogovorno okno – s spustnim seznamom, ki prikaže seznam iz X-Wkl-Roles. Access in DAO si delita povezavo med vsemi povezavami procesa z isto vrednostjo DATABASE, tudi če se njihov ROLE= razlikuje: tam za vse te povezane tabele velja identiteta prve povezave. Druga identiteta v isti seji Accessa potrebuje lastno vrednost DATABASE v svojem nizu povezave; pravilo opisuje dokumentacija gonilnika (ključne besede povezave).

Sorodne teme

sl/wiki/data-conectivity/database-gateway/reference/identity.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille