Posredovanje identitete oseb strežniku SQL Server
Privzete vrednosti stolpcev, sprožilci in pogledi vaše podatkovne zbirke uporabljajo USER_NAME()
ali SUSER_SNAME(). Da bi podatkovna zbirka videla osebo namesto prijave prehoda, prehod vsak
stavek osebe, prijavljene z računom Windows, izvede pod njeno lastno prijavo SQL Server
(Impersonate).
Pregled rešitve
Vir podatkov nastavite na Personen (osebe) = Impersonate; seznam zavrnitev izvzame prijave,
ki jih prehod nikoli ne sme prevzeti (na primer sa ali sistemske skrbnike od zunaj). V SQL
Serverju potrebuje prijava vira podatkov dovoljenje za prevzemanje drugih prijav, vsaka oseba pa
lastno prijavo. Pravila in odgovori: Posredovanje identitete.
Izvedba
V SQL Serverju dodelite dovoljenje prijavi vira podatkov in tam dodatno zaklenite prijave, ki se nikoli ne smejo prevzeti:
GRANT IMPERSONATE ANY LOGIN TO [<prijava vira podatkov>]; DENY IMPERSONATE ON LOGIN::[sa] TO [<prijava vira podatkov>];
Preostalo tveganje.
IMPERSONATE ANY LOGINprijavi vira podatkov dovoli prevzeti vsako prijavo, tudi prijavo z vlogo sysadmin.DENYzaklene le navedeno prijavo; druge sistemske skrbnike, tudi pozneje ustvarjene, je še vedno mogoče prevzeti. Seznam zavrnitev prehoda (3. korak) preverja pred vsako zamenjavo, vendar je del prehoda: kdor ima niz povezave vira podatkov, ga obide. Ožje je dovoljenje za posamezno prijavo,GRANT IMPERSONATE ON LOGIN::[FIRMA\e.muster] TO [<prijava vira podatkov>](GRANT Server Principal Permissions), vendar zahteva vnos za vsako novo osebo.- Za vsako osebo v SQL Serverju ustvarite lastno prijavo Windows (
CREATE LOGIN [FIRMA\e.muster] FROM WINDOWS) in ji dodelite dovoljenja v podatkovni zbirki. Dostop samo prek skupine Windows ne zadošča: SQL Server takšne osebe ne prevzame. - Preklopite vir podatkov in ustvarite seznam zavrnitev prehoda.
- S skrbniško shrambo: Datenquellen (viri podatkov), označite vir podatkov, Personen nastavite na
Impersonate; seznam zavrnitev urejate pod Identitäten (identitete), zavihek Sperrliste Identitätswechsel (seznam zavrnitev zamenjave identitete) (Weitere (več) > Neuer Sperreintrag (nov vnos zavrnitve)). Brez skrbniške shrambe:
{ "Name": "fachdaten", "Provider": "sqlserver", "ConnectionString": "…", "Persons": "Impersonate", "DenyImpersonate": [ { "Logins": [ "sa", "FIRMA\\Datenbankbetrieb" ] }, // nikoli { "Roles": [ "sysadmin" ], "ExceptFrom": [ "192.168.0.0/16" ] } // sistemski skrbniki le iz lastnega omrežja ] }
- Če je pred prehodom posredniški strežnik in seznam zavrnitev uporablja omrežja, ga vpišite pod
Security:TrustedProxies; glejte Delovanje prehoda za strežnikom IIS ali drugim posredniškim strežnikom. - Preverite s prijavo osebe: v novem zapisu tabele, ki ima za privzeto vrednost stolpca
SUSER_SNAME(), je vpisana oseba. Če vir podatkov sprejema lastne stavke SQL (AllowPassThrough) in sme oseba tam pisati, tudi lasten stavekSELECT SUSER_SNAME(), ORIGINAL_LOGIN()pokaže osebo in prijavo vira podatkov. Pravicesqloseba za to ne potrebuje: pri prevzemu identitete odločajo dovoljenja osebe v SQL Serverju.
Razveljavitev. Personen znova nastavite na Service; stavki takrat spet tečejo pod
prijavo vira podatkov – prek skrbniške shrambe z naslednjo zahtevo, prek
konfiguracijske datoteke po ponovnem zagonu. Dovoljenje v SQL Serverju odvzamete z
REVOKE IMPERSONATE ANY LOGIN FROM [<prijava vira podatkov>].
Napotki
- Račun Windows brez lastne prijave je zavrnjen (
403); zahteva se ne izvede nadomestno pod prijavo vira podatkov. Oseba z osebnim ključem brez vpisane prijave SQL Server pa teče pod prijavo vira podatkov, s svojim imenom v kontekstu seje; če naj se stavki izvajajo pod njeno identiteto, ji v skrbništvu vpišite prijavo SQL Server. Na strežniku to storisave-person --name … --login …; pravila in zapora osebe pri tem ostanejo nespremenjeni (glejte Ukazi). - Po preimenovanju računa Windows je treba preimenovati tudi prijavo:
ALTER LOGIN [FIRMA\alt] WITH NAME = [FIRMA\neu]; glejte Odpravljanje težav. - Stroški: zamenjava podaljša vsako zahtevo v prehodu. Okvirna vrednost za lokalne račune Windows: približno 15 ms na zahtevo v primerjavi s približno 2 ms brez zamenjave.
- Skupne prijave namesto ene za vsako osebo: če naj osebe delajo pod prijavo oddelka, glejte „Nastavitev identitet podatkovne zbirke“ (dokumentacija aplikacije za upravljanje).
- Osebni ključi prevzamejo prijavo osebe, če ima ta v upravljanju lastno prijavo SQL Server; ključi storitve nikoli ne zamenjajo identitete.