Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Ez a cikk azt ismerteti, hogy az SQL Server hogyan használja a biztonsági gyorsítótárat annak ellenőrzésére, hogy a rendszerbiztonsági tagoknak milyen engedélyekkel kell hozzáférnie a biztonságos objektumokhoz.
Cél
Az adatbázismotor hierarchikus entitásgyűjteményt, más néven biztonságos objektumokat szervez, amelyek engedélyekkel védhetők. A legfontosabb biztonságos objektumok a kiszolgálók és az adatbázisok, de az engedélyeket finomabb szinten is meg lehet adni. Az SQL Server a megfelelő engedélyek biztosításával szabályozza az alanyok műveleteit a védett objektumokon.
Az alábbi ábra azt mutatja be, hogy egy felhasználó, Alice, rendelkezik egy bejelentkezéssel a kiszolgáló szintjén, és három különböző felhasználó van leképezve ugyanarra a bejelentkezésre az egyes adatbázisokban.
A hitelesítési folyamat optimalizálásához az SQL Server egy biztonsági gyorsítótárat használ.
Nincs gyorsítótár-munkafolyamat
Ha a biztonsági gyorsítótár érvénytelen, az SQL Server egy gyorsítótár nélküli munkafolyamatot követ az engedélyek érvényesítéséhez. Ez a szakasz a gyorsítótár nélküli munkafolyamatot ismerteti.
A szemléltetéshez fontolja meg a következő lekérdezést:
SELECT t1.Column1,
t2.Column1
FROM Schema1.Table1 AS t1
INNER JOIN Schema2.Table2 AS t2
ON t1.Column1 = t2.Column2;
Ha a biztonsági gyorsítótár érvénytelen, a szolgáltatás a lekérdezés feloldása előtt végrehajtja az alábbi munkafolyamatban leírt lépéseket.
Sql Server esetén a biztonsági gyorsítótár nélküli feladatok a következők:
- Csatlakozzon a példányhoz.
- Bejelentkezési ellenőrzés végrehajtása.
- Hozza létre a biztonsági környezet jogkivonatát és a bejelentkezési jogkivonatot. Ezeknek a tokeneknek a részleteit a következő szakaszban ismertetjük.
- Csatlakozzon az adatbázishoz.
- Hozzon létre egy adatbázis-felhasználói jogkivonatot az adatbázisban.
- Ellenőrizze az adatbázis-szerepkörök tagságát. Például db_datareader, db_datawriter vagy db_owner.
- Ellenőrizze a felhasználói engedélyeket az összes oszlopon, például a felhasználó engedélyeit a
t1.Column1ést2.Column1oszlopokon. - Ellenőrzi a felhasználói engedélyeket az összes táblán, például
table1éstable2, valamint a sémaengedélyeket aSchema1ésSchema2-n. - Ellenőrzi az adatbázis engedélyeit.
Az SQL Server megismétli a folyamatot minden olyan szerepkör esetében, amelyhez a felhasználó tartozik. Az összes engedély megszerzése után a kiszolgáló ellenőrzi, hogy a felhasználó rendelkezik-e a láncban minden szükséges engedéllyel, és hogy egyetlen megtagadás sincs a láncban. Az engedélyellenőrzés befejezése után megkezdődik a lekérdezés végrehajtása.
További információkért tekintse át az engedély-ellenőrzési algoritmus összegzését.
Az érvényesítés egyszerűsítése érdekében az SQL Server biztonsági gyorsítótárat használ.
Biztonsági gyorsítótár definíciója
A biztonsági gyorsítótár egy felhasználó vagy egy bejelentkezés engedélyeit tárolja egy adatbázis vagy kiszolgáló különböző biztonságos objektumaihoz. Az egyik előnye, hogy felgyorsítja a lekérdezések végrehajtását. Mielőtt az SQL Server végrehajt egy lekérdezést, ellenőrzi, hogy a felhasználó rendelkezik-e a szükséges engedélyekkel a különböző adatbázisokhoz, például sémaszintű engedélyekhez, táblaszintű engedélyekhez és oszlopengedélyekhez.
Biztonsági gyorsítótár-objektumok
Az előző szakaszban ismertetett munkafolyamat felgyorsítása érdekében az SQL Server számos különböző objektumot gyorsítótáraz a biztonsági gyorsítótárakban. A gyorsítótárazott objektumok némelyike a következők:
| Jelző | Leírás |
|---|---|
SecContextToken |
A kiszolgáló-szintű biztonsági környezet egy főre ebben a struktúrában van tárolva. A felhasználói tokenek hash tábláját tartalmazza, és kiindulópontként vagy alapként szolgál az összes többi gyorsítótárhoz. A bejelentkezési jogkivonatra, a felhasználói jogkivonatra, a naplózási gyorsítótárra és a TokenPerm gyorsítótárra mutató hivatkozásokat tartalmaz. Emellett a kiszolgáló szintjén történő bejelentkezés alapjogkivonataként is működik. |
LoginToken |
Hasonló a biztonsági környezet jogkivonatához. A kiszolgálószintű tagok adatait tartalmazza. A bejelentkezési jogkivonat különböző elemeket tartalmaz, például a SID-et, a bejelentkezési azonosítót, a bejelentkezési típust, a bejelentkezési nevet, az isDisabled állapotot és a kiszolgáló által rögzített szerepkör-tagságot. Emellett a kiszolgáló szintjén speciális szerepköröket is magában foglal, például a sysadmint és a biztonsági rendszergazdat. |
UserToken |
Ez a struktúra adatbázisszintű tagokhoz kapcsolódik. Olyan részleteket tartalmaz, mint a felhasználónév, az adatbázisszerepkörök, a SID, az alapértelmezett nyelv, az alapértelmezett séma, az azonosító, a szerepkörök és a név. Adatbázisonként egy felhasználói token van a bejelentkezéshez. |
TokenPerm |
Rögzíti az összes engedélyt egy biztonságos objektumhoz, amely egy UserTokenhez vagy SecContextTokenhez tartozik. |
TokenAudit |
A kulcs egy biztonságos objektum osztálya és azonosítója. A bejegyzés olyan listák sorozata, amelyek egy objektum minden egyes naplózható műveletéhez tartalmaznak naplózási azonosítókat. A kiszolgálónaplózás az engedélyellenőrzéseken alapul, és részletezi az adott felhasználó által egy adott objektumon végzett összes naplózható műveletet. |
TokenAccessResult |
Ez a gyorsítótár az egyes lekérdezések lekérdezési engedély-ellenőrzési eredményeit tárolja, lekérdezéstervenként egy bejegyzéssel. Ez a legfontosabb és leggyakrabban használt gyorsítótár, mivel ez az első dolog, amelyet a lekérdezés végrehajtása során ellenőriztek. Annak érdekében, hogy az alkalmi lekérdezések ne árasztják el a gyorsítótárat, csak akkor tárolja a lekérdezés engedély-ellenőrzési eredményeit, ha a lekérdezést háromszor hajtják végre. |
ObjectPerm |
Ez az adatbázis egy objektumának összes engedélyét rögzíti az adatbázis összes felhasználója számára. A TokenPerm és az ObjectPerm közötti különbség az, hogy a TokenPerm egy adott felhasználóhoz tartozik, míg az ObjectPerm az adatbázis összes felhasználója számára lehet. |
Biztonsági gyorsítótár-tárolók
A tokenek különböző gyorsítótár-tárolókban vannak tárolva.
| Store | Leírás |
|---|---|
TokenAndPermUserStore |
Egy nagy áruház, amely az alábbi objektumok mindegyikét tartalmazza: - SecContextToken- LoginToken- UserToken- TokenPerm- TokenAudit |
SecCtxtACRUserStore |
Hozzáférés-ellenőrzési eredmény (ACR) tároló. Minden bejelentkezésnek van egy külön biztonsági kontextus felhasználói tárolója. |
ACRUserStore |
Hozzáférés-ellenőrzés eredménytárolója<unique id> - <db id>- <user id>Minden felhasználó egyéni ACR-felhasználói tárolóval rendelkezik. Például két bejelentkezés két különböző adatbázisba öt felhasználóval összesen két SecCtxtACRUserStore és 10 különböző ACRUserStore. |
ObjectPerm |
Adatbázis-tokenenként ObjPerm egyet. Az adatbázisban található összes különböző biztonságos eszköz. |
Ismert problémák
Ez a szakasz a biztonsági gyorsítótárral kapcsolatos problémákat ismerteti.
Biztonsági gyorsítótár érvénytelenítések
Különböző forgatókönyvek aktiválhatják a biztonsági gyorsítótár érvénytelenítéseit az adatbázis vagy a kiszolgáló szintjén. Érvénytelenítés esetén a rendszer az összes aktuális gyorsítótár-bejegyzést érvényteleníti. A jövőbeli lekérdezések és engedélyellenőrzések a teljes "Nincs gyorsítótár" munkafolyamatot követik, amíg a gyorsítótárak újra nem lesznek feltöltve. Az érvénytelenítés jelentősen befolyásolhatja a kiszolgáló teljesítményét, különösen nagy terhelés esetén, mivel minden aktív kapcsolatnak újra kell építenie a gyorsítótárazott bejegyzéseket. Az ismételt gyorsítótár-érvénytelenítések ronthatják ezt a hatást. Az adatbázisban lévő master érvénytelenítések kiszolgálószintű érvénytelenítésekként vannak kezelve, ami hatással van a példány összes adatbázisának gyorsítótárára.
Az SQL Server 2025 egy olyan funkciót vezet be, amely csak egy adott bejelentkezés gyorsítótárait érvényteleníti. Ez azt jelenti, hogy amikor a biztonsági gyorsítótár bejegyzései érvénytelenítve vannak, csak az érintett bejelentkezéshez tartozó bejegyzések érintettek. Ha például új engedélyt ad az L1 bejelentkezéshez, az L2 bejelentkezési jogkivonatok változatlanok maradnak.
Ez a funkció első lépésként a CREATE, ALTER és DROP bejelentkezési forgatókönyvekre, valamint az egyes bejelentkezések engedélymódosítására vonatkozik. A csoportos bejelentkezések továbbra is kiszolgálószintű érvénytelenítést tapasztalnak.
Az alábbi táblázat felsorolja az összes olyan biztonsági adatdefiníciós nyelvi (DDL-) műveletet, amely érvényteleníti a biztonsági gyorsítótárat.
| Tevékenység | Tárgy | Hatókör |
|---|---|---|
CREATE/ALTER/DROP |
APPLICATION ROLESYMMETRIC KEYASYMMETRIC KEYAUTHORIZATIONCERTIFICATEROLESCHEMAUSER |
Megadott adatbázis |
DROP |
Bármely objektum, amely megjelenik sys.all_objects vagy az adatbázis vagy a séma hatókörű biztonságos listában felsorolt bármely biztonságos objektum. | Megadott adatbázis |
GRANT/DENY/REVOKE |
Adatbázis vagy séma által tartalmazott biztonságossá tételrevonatkozó bármely engedély. | Megadott adatbázis |
CREATE/ALTER/DROP |
LOGIN( SERVICE) MASTER KEY |
SQL Server-példány |
ALTER |
DATABASE |
Megadott adatbázis |
Lekérdezési teljesítmény a TokenAndPermUserStore méretének növekedésével
A teljesítményproblémákat, például a magas processzorhasználatot és a megnövekedett memóriahasználatot a TokenAndPermUserStore gyorsítótár túlzott bejegyzései okozhatják. Alapértelmezés szerint az SQL Server csak akkor törli a gyorsítótár bejegyzéseit, ha belső memóriaterhelést észlel. A sok RAM-mal rendelkező kiszolgálókon azonban előfordulhat, hogy a belső memóriaterhelés nem gyakran fordul elő. A gyorsítótár növekedésével nő a meglévő bejegyzések újbóli kereséséhez szükséges idő. Ezt a gyorsítótárat egy spinlock felügyeli, így egyszerre csak egy szál hajthatja végre a keresést. Ennek következtében ez a viselkedés a lekérdezési teljesítmény csökkenéséhez és magasabb processzorhasználathoz vezethet.
Megoldás
Az SQL Server két nyomkövetési jelzőt (TF) biztosít, amelyek a TokenAndPermUserStore gyorsítótár kvótájának beállításához használhatók. Alapértelmezés szerint nincs kvóta, ami azt jelenti, hogy a gyorsítótár korlátlan számú bejegyzést tartalmazhat.
- TF 4618: A TokenAndPermUserStore bejegyzéseinek számát 1024-re korlátozza.
- TF 4618 és TF 4610: A TokenAndPermUserStore bejegyzéseinek számát 8192-re korlátozza. Ha a TF 4618 alacsony bejegyzésszámkorlátja más teljesítményproblémákat okoz, javasolt, hogy használja együtt a nyomkövetési zászlókat 4610 és 4618. További információ: Nyomkövetési jelzők beállítása a DBCC TRACEON használatával.
További információ: A teljesítményproblémákat a TokenAndPermUserStore gyorsítótár túlzott bejegyzései okozhatják – SQL Server
Ajánlott eljárások
Ez a szakasz a biztonsági munkafolyamat optimalizálásához ajánlott eljárásokat sorolja fel.
Felhasználókezelés nem munkaidőben
Tekintettel a biztonsági gyorsítótárak (adatbázis-/kiszolgálószint) magas szintű érvénytelenítési jellegére, biztonsági DLL-eket kell végrehajtani a nem üzemidős időszakokban, amikor a kiszolgáló terhelése alacsony. Ha a biztonsági gyorsítótár érvénytelenítése nagy számítási feladatok során történik, a biztonsági gyorsítótárak újrafeltöltése jelentős teljesítménybeli hatással lehet a teljes kiszolgálóra.
Egyetlen tranzakció használata engedélymódosításokhoz
Ha ugyanazon a tranzakción belül több biztonsági adatdefiníciós nyelvet (DDL) hajt végre, azzal jelentősen növelheti annak az esélyét, hogy holtpontokba ütközzenek más aktív kapcsolatokkal. Ennek a kockázatnak a mérséklése érdekében ajánlott elkerülni, hogy egyetlen tranzakcióban több biztonsági DDL-t hajtsunk végre. Ehelyett hajtsa végre a biztonsággal kapcsolatos DDL-műveleteket külön tranzakciókban a zárolási versengés minimalizálása érdekében.