Wednesday, April 9th, 2008...10:16 pm

SQL 2008 i Kerberos

Jump to Comments

W trakcie krótkiej wizyty na C2C (o której już pisałem wcześniej) udało mi się zajść na jedną z sesji technicznych prowadzoną przez Marcina Szeligę a dotyczącą zmian w zakresie bezpieczeństwa w SQL 2008.

W zasadzie to jak to w tematach SQLowych … coś rozumie, specjalistą nie jestem :), ożywiłem się gdzy Marcin doszedł do tematów związanych z uwierzytelnieniem i Kerberos. W zasadzie to były tylko dwa slajdy – ale w końcu coś na czym się znałem. Jedna z podstawowych zmian o jakich wspomniał Marcin to brak konieczności rejestrowania SPN przez SQL Server i możliwość określenia ich w łańcuchu połączenia (connection string). Slajd poniżej (mam nadzieję że nie łamię żadnych praw autorskich 🙂 ):

 

Tutaj moje uszy trochę zastrzygły … z tego co wiem to SPN czasami się przydają. Upewniłem się po sesji u Marcina, że się nie przesłyszałem i powiedziałem że sprawdzę … no to sprawdzam.

Swoją drogą ciekawy jest sam problem, z którym kilka razy się spotkałem. Rejestracja SPN stanowi problem zarówno dla developerów \ wdrożeniowców (chyba najczęstsza rzecz, o której się zapomina przy instalacji aplikacji), jak i dla administratorów (co i gdzie zarejestrować). W szczególności gdy administrator usługi katalogowej nie wydelegował odpowiednich uprawnień do atrybutu servicePrincipalName.

W zasadzie trochę w tym co powiedział Marcin prawdy jest. Tylko trzeba to doprecyzować. Tak więc:

  • Faktycznie jest tak, że SPN można podać jako atrybut w ramach connection string.
  • Nie do końca jest tak, że nie trzeba rejestrować SPN w AD dla instancji SQL. SPN nadal są wymagane jeżeli korzystamy z uwierzytelnienia opartego na Kerberos i specyfikujemy usługę w oparciu o SPN lub po prostu łączymy się do usługi, czyli:
    • jeżeli SPN jest określony w connection string to usługa sama z siebie nie będzie starała się takowego skonstruować w oparciu o FQDN hosta, tylko użyje tego który został podany. Uwaga więc dla konfiugrujących rozwiązanie – sprawdźcie dwa razy connection stringi w konfiugracji.
    • jeżeli podajemy SPN w postaci MSSQLSVC/FQDN:<port|instancename>, lub nie podajemy go w ogóle to musi on być zarejestrowany w AD.
  • Nie jest wymagana rejestracja SPN dla usługi SQL 2008, jeżeli w connection string określimy usługę w formacie;
    • serviceacount@domain – czyli UPN konta serwisowego
    • domain\serviceaccount – czyli po prostu logon name
    • machine$@domain – czyli UPN maszyny, z tym że to pewnie zadziała tylko gdy SQL działa na jednym z kont systemowych maszyny
    • host\FQDN – uwaga jak wyżej.

Czyli jeżeli jesteśmy w stanie wskazać od razu odpowiednie konto systemowe czy maszynę to unikamy wyszukania odpowiedniego konta w AD w oparciu o SPN i nie musimy takowych rejestrować. I to już mi pasuje do mojego stanu wiedzy :), i wszystko gra.

I taki to pożytek z mojej obecności na C2C 2008.

P.S. Paweł opublikował zapis rozmowy kuluarowej, którą toczyliśmy w trakcie jednej z sesji na swoim blogu – to tak w ramach rozrywki.

Leave a Reply