Megosztás:


Az SQL Server Active Directory-hitelesítésének ismertetése Linuxon és tárolókon

A következőkre vonatkozik:SQL Server Linux rendszeren

Ez a cikk részletesen ismerteti, hogyan működik az Active Directory-hitelesítés a Linuxon vagy tárolókon üzembe helyezett SQL Serveren.

Fogalmak

Könnyűsúlyú könyvtár-hozzáférési protokoll (LDAP)

Az LDAP egy alkalmazásprotokoll a különböző címtárszolgáltatások, köztük az Active Directory használatára. A címtárszolgáltatások felhasználói és fiókadatokat, valamint biztonsági információkat, például jelszavakat tárolnak. Ezek az információk titkosítva vannak, majd meg vannak osztva a hálózaton lévő más eszközökkel.

További információt az LDAP biztonsági aláírásának engedélyezéséről Windows Serveren az alábbiakban talál: Hogyan engedélyezze az LDAP aláírást a Windows Serverben.

Kerberos

A Kerberos egy hitelesítési protokoll, amely egy felhasználó vagy egy gazdagép személyazonosságának ellenőrzésére szolgál. Az ügyfél és a kiszolgáló ellenőrzésének módjaként tekinthet rá.

Ha heterogén (vegyes) környezetben dolgozik, ahol Windows és nem Windows rendszerű kiszolgálók és ügyfelek vannak, kétféle fájlra van szüksége az Active Directory-alapú címtárszolgáltatásokhoz:

  • Keytab-fájlok (a "kulcstáblák" rövid neve)
  • Kerberos konfigurációs fájlok (krb5.conf vagy krb5.ini)

Mi az a keytab-fájl?

A Linux- vagy Unix-rendszerek kiszolgálói folyamatai nem konfigurálhatók folyamatok Windows-szolgáltatásfiókkal való futtatására. Ha azt szeretné, hogy egy Linux- vagy Unix-rendszer automatikusan jelentkezzen be az Active Directoryba indításkor, keytab fájlt kell használnia.

A keytab egy titkosítási fájl, amely egy Kerberos által védett szolgáltatás és annak hosszú távú kulcsának a társított szolgáltatásnévnek a Kulcsterjesztési központban (KDC) való megjelenítését tartalmazza. A kulcs nem maga a jelszó.

A keytabok a következőkre használhatók:

  • magát a szolgáltatást a hálózat egy másik szolgáltatásának hitelesíti, vagy
  • egy bejövő címtárfelhasználó Kerberos-szolgáltatásjegyének visszafejtése a szolgáltatásba.

Mi az a krb5.conf fájl?

A /etc/krb5.conf fájl (más néven krb5.ini) konfigurációs bemeneteket biztosít a Kerberos v5 (KRB5) és a GNU Simple Authentication and Security Layer API (GSSAPI) kódtárakhoz.

Ezek az információk tartalmazzák az alapértelmezett tartományt, az egyes tartományok tulajdonságait (például a kulcsterjesztési központokat) és az alapértelmezett Kerberos-jegy élettartamát.

Ez a fájl szükséges az Active Directory-hitelesítés működéséhez. krb5.conf egy INI-fájl, de a kulcs-érték pár minden egyes értéke lehet egy alcsoport, amelyet { és }zárnak be.

A krb5.conf fájllal kapcsolatos további információkért tekintse meg a MIT Kerberos Consortium dokumentációját.

Kerberos konfigurálása SQL Serverhez Linuxon

Ezekre az értékekre van szüksége a Linuxon futó SQL Servert futtató gazdakiszolgálón. Ha más (nem SQL Server) szolgáltatások futnak ugyanazon a gazdagépen, előfordulhat, hogy a krb5.conf fájlnak több bejegyzésre is szüksége lehet.

Íme egy példa krb5.conf fájlra:

[libdefaults]
default_realm = CONTOSO.COM

[realms]
CONTOSO.COM = {
  kdc = adVM.contoso.com
  admin_server = adVM.contoso.com
  default_domain = contoso.com
}

[domain_realm]
.contoso.com = CONTOSO.COM
contoso.com = CONTOSO.COM
  • libdefaults – a default_realm értéknek jelen kell lennie. Ez az érték azt a tartományt adja meg, amelyhez a gazdagép tartozik.

  • realms (nem kötelező) – Minden egyes tartomány esetében a kdc érték megadhatja, hogy a gép mely kulcsterjesztési központokkal lépjen kapcsolatba az Active Directory-fiókok keresésekor. Ha több KDC-t állított be, az egyes kapcsolatokhoz tartozó KDC körkörös kiválasztási módszerrel lesz kiválasztva.

  • domain_realm (nem kötelező) – Az egyes tartományok leképezései megadhatóak. Ha nem, akkor a Linuxon futó SQL Server feltételezi, hogy a tartomány contoso.com a birodalom CONTOSO.COMmegfeleltetése.

A Kerberos hitelesítési folyamata

A Windows kerberos-hitelesítéséhez hasonlóan a jegykiadó jegy (TGT) beszerzésének első két lépése ugyanaz:

  • Az ügyfél úgy kezdi meg a bejelentkezési folyamatot, hogy elküldi a felhasználónevet és a jelszót (titkosított) a tartományvezérlőnek (DC).

  • Miután a felhasználónév és a jelszó ellenőrzésre került a belső tárolóban, a tartományvezérlő TGT-t ad vissza az ügyfélnek.

A Linuxon futó SQL Server a keytab-fájllal olvassa be a szolgáltatásnév (SPN) jelszavát, majd visszafejti a titkosított blobot, amelyet a kapcsolat engedélyezéséhez használ. A következő lépések ezt a folyamatot ismertetik.

  • Ha a felhasználó rendelkezik a TGT-vel, az ügyfél az SQL Server-példány állomásnevének és portjának megadásával elindítja az SQL Server-kapcsolatot.

  • Az SQL-ügyfél belső folyamatában létrehoz egy Service Principal Name-t MSSQLSvc/<host>:<port>formátumban. Ez egy beépített formátum a legtöbb SQL Server kliensben.

  • Az ügyfél úgy indítja el a Kerberos kézfogást, hogy egy munkamenet-kulcsot kér a tartományvezérlőtől az adott SPN-hez. A TGT-t és az SPN-t elküldik a DC-nek.

Diagram az SQL Server Active Directory-hitelesítéséről Linux rendszeren – Ticket-Granting tartományvezérlőnek küldött jegy- és szolgáltatásnév.

  • Miután a tartományvezérlő ellenőrzi a TGT-t és az SPN-t, elküldi a munkamenetkulcsot az ügyfélnek az SQL Server SPN-hez való csatlakozáshoz.

Diagram az SQL Server Active Directory-hitelesítéséről Linux rendszeren – a tartományvezérlő által az ügyfélnek visszaadott munkamenetkulcs.

  • A munkamenetkulcsból származó titkosított blobot a rendszer elküldi a kiszolgálónak.

Diagram az SQL Server linuxos Active Directory-hitelesítéséről – a kiszolgálónak küldött munkamenetkulcs.

  • Az SQL Server beolvassa az SPN jelszavát a keytab (mssql.keytab) kulcstáblájából, amely egy titkosított (SPN, jelszó) csuplokat tartalmazó lemezen található fájl.

  • Az SQL Server visszafejti a titkosított blobot az imént előkeresett jelszóval, hogy megkapja az ügyfél felhasználónevét.

  • Az SQL Server megkeresi az ügyfelet a sys.syslogins táblában, és ellenőrzi, hogy az ügyfél jogosult-e a csatlakozásra.

  • A kapcsolatot vagy elfogadják, vagy elutasítják.

Diagram az SQL Server Active Directory-hitelesítéséről Linux rendszeren – a kapcsolat elfogadott vagy megtagadva.

Kerberos konfigurálása SQL Server-tárolókhoz

A tárolókban lévő SQL Server Active Directory-hitelesítése lényegében megegyezik a Linuxon futó SQL Serverrel. Az egyetlen különbség az SQL Server gazda SPN-je. Az előző forgatókönyvben az SPN MSSQLSvc/<host>:<port> volt, mert az SQL Server kiszolgáló nevével kapcsolódtunk. Most azonban csatlakozni kell a tárolóhoz.

SQL Server-tárolók esetén létrehozhatja a krb5.conf fájlt a tárolón belül. A tárolót futtató gazdacsomópontnak nem kell a tartomány részét képeznie, hanem el kell érnie azt a tartományvezérlőt, amelyhez a tároló csatlakozni próbál.

Mivel egy tárolóhoz csatlakozunk, az ügyfélkapcsolatban lévő kiszolgáló neve eltérhet a gazdagépnévétől. Lehet a gazdagép neve, a tároló neve vagy egy másik alias. Emellett jó eséllyel az SQL Server közzétett portja nem lesz az alapértelmezett 1433.

Ahhoz, hogy csatlakozzon az SQL Server tárolóhoz, a mssql.keytab-ban tárolt SPN-t kell használnia. Ha például az SPN a mssql.keytab név MSSQLSvc/sqlcontainer.domain.com:8000, akkor a sqlcontainer.domain.com,8000 kapcsolat karakterláncot kell használnia az ügyfélben.

Megjegyzés:

Az SQL Server egy példányához bármilyen ismerős SQL Server-ügyféleszközzel csatlakozhat, például sqlcmd, SQL Server Management Studio (SSMS) vagy a Visual Studio Code MSSQL-bővítményével.

SQL Server-tárolók Active Directory-hitelesítését bemutató diagram.

SQL Server-csoport frissítése

Felmerülhet a kérdés, hogy miért van felhasználói fiók a kulcstáblában, ha csak egy egyszerű szolgáltatásnévre van szüksége a hitelesítéshez.

Tegyük fel, hogy van egy felhasználói adUser, amely tagja egy csoportnak adGroup. Ha adGroup hozzáadódik az SQL Serverhez való bejelentkezéshez, az azt jelenti, hogy adUser is rendelkezik engedéllyel az SQL Server-példányba való bejelentkezéshez. Bár adUser továbbra is csatlakozik az SQL Serverhez, a tartományi rendszergazda eltávolíthatja adUseradGroup. Most adUser már nem rendelkezhet engedéllyel az SQL Serverbe való bejelentkezéshez, de már átmentek a Kerberos hitelesítési folyamaton, és csatlakoztak.

Rendszeres időközönként futtatunk egy csoportfrissítési nevű folyamatot, hogy védelmet nyújtsunk az olyan helyzetek ellen, amikor a csatlakoztatott felhasználók már nem végezhetnek emelt szintű műveletet (például bejelentkezést hozhatnak létre vagy adatbázist módosíthatnak).

Az SQL Server rendelkezik egy kiemelt Active Directory-fiókkal, amelyet a csoportfrissítéshez használ. Ez a fiók vagy be van állítva a mssql-conf használatával a network.privilegedadaccount beállításon keresztül, vagy alapértelmezés szerint a gazdagép szerverének számítógépfiókjára (<hostname>$) támaszkodik.

A mssql.keytab kiemelt fiók hitelesítő adatai az ügyfél megszemélyesítésére szolgálnak (ebben a példábanadUser). Az SQL Server egy Kerberos-kézfogást végez önmagával, hogy azonosítsa a csoporttagsági információkat, és összehasonlítja azokat a sys.syslogins-jel, hogy ellenőrizze, vajon adUser még mindig rendelkezik-e a kapcsolódáshoz és a kért Transact-SQL parancsok végrehajtásához szükséges engedélyekkel. Ha adUser el lett távolítva a adGroup-ból, akkor az SQL Server megszakítja a kapcsolatot.

A csoportfrissítéshez a következő két feltétel szükséges:

  • Hálózati kapcsolat az SQL Server-példány és a helyszíni Active Directory-tartomány között.
  • Kétirányú megbízhatóság az SQL Server által csatlakoztatott tartomány és a helyszíni Active Directory-tartomány között. További információ: Az Active Directoryismertetése.