Megosztás:


Always Encrypted (mindig titkosítva)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példány

Az Always Encrypted diagramja.

Az Always Encrypted és az Always Encrypted biztonságos enklávékkal olyan funkciók, amelyek a bizalmas információk védelmére szolgálnak, beleértve a hitelkártyaszámokat és a nemzeti vagy regionális azonosító számokat (például az egyesült államokbeli társadalombiztosítási számokat), az Azure SQL Database-ben, az Azure SQL Managed Instance-ben és az SQL Server-adatbázisokban. Az ügyfélalkalmazások bizalmas adatait titkosíthatja, így biztosítva, hogy a titkosítási kulcsok soha ne legyenek elérhetők az adatbázismotor számára. Ez a megközelítés elkülönítést biztosít az adatok tulajdonosa és azok között, akik az adatokat kezelik, de nem férhetnek hozzá: helyszíni adatbázis-rendszergazdák, felhőadatbázis-üzemeltetők vagy más magas jogosultságú jogosulatlan felhasználók. Ennek eredményeképpen az Always Encrypted lehetővé teszi az ügyfelek számára, hogy biztonságosan tárolják bizalmas adataikat a felhőben, csökkentve ezzel a rosszindulatú bennfentesek adatlopásának kockázatát.

Az Always Encrypted bizonyos korlátozásokkal rendelkezik, például a titkosított adatokon végzett műveletek nem végezhetők el, beleértve a rendezést és a szűrést is (kivéve a determinisztikus titkosítást használó pontkereséseket). Ez a korlátozás azt jelenti, hogy egyes lekérdezések és alkalmazások nem kompatibilisek az Always Encrypteddel, vagy jelentős módosításokat igényelhetnek az alkalmazáslogikában.

A korlátozások kezelése érdekében az Always Encrypted biztonságos enklávékkal lehetővé teszi az adatbázismotor számára a titkosított adatok feldolgozását egy biztonságos enklávénak nevezett védett memóriaterületen belül. A biztonságos enklávék a mintaegyeztetés, a különböző összehasonlító operátorok és a helyszíni titkosítás támogatásával növelik az Always Encrypted bizalmas számítási képességeit.

Az Always Encrypted biztosítja, hogy a titkosítás zökkenőmentes legyen az alkalmazások számára. Az ügyfélen az Always Encrypted-kompatibilis illesztőprogram titkosítja a bizalmas adatokat, mielőtt elküldené azokat az adatbázismotornak, és automatikusan újraírja a lekérdezéseket az alkalmazás szemantikájának fenntartása érdekében. Emellett automatikusan visszafejti a lekérdezési eredményeket a titkosított adatbázisoszlopokból.

Always Encrypted konfigurálása

Megjegyzés:

Azoknak az alkalmazásoknak, amelyeknek mintaegyeztetést kell végezniük, használjon összehasonlító operátorokat, rendezési és indexelési műveleteket titkosított oszlopokon, implementálja az Always Encryptedt biztonságos enklávékkal.

Ez a szakasz áttekintést nyújt az Always Encrypted beállításáról. A részletekért és az első lépésekért tekintse meg az Always Encrypted használatának első lépéseit ismertető oktatóanyagot.

Az Always Encrypted adatbázisbeli konfigurálásához kövesse az alábbi lépéseket:

  1. Titkosítási kulcsok kiépítése az adatok védelméhez. Az Always Encrypted kétféle kulcsot használ:

    • Oszloptitkosítási kulcsok.
    • Oszlop főkulcsai.

    Az oszloptitkosítási kulcs titkosítja a titkosított oszlopon belüli adatokat. Az oszlop főkulcsa egy kulcsvédő kulcs, amely egy vagy több oszloptitkosítási kulcsot titkosít.

    Az oszlop főkulcsait az adatbázisrendszeren kívüli megbízható kulcstárolóban tárolhatja, például az Azure Key Vaultban, a Windows tanúsítványtárolójában vagy egy hardveres biztonsági modulban. A lépés után építse ki az oszloptitkosítási kulcsokat, és titkosítsa az egyes kulcsokat egy oszlop főkulcsával.

    Végül mentse a metaadatokat az adatbázis kulcsairól. Az oszlop főkulcsának metaadatai tartalmazzák az oszlop főkulcsának helyét. Az oszloptitkosítási kulcs metaadatai az oszloptitkosítási kulcs titkosított értékét tartalmazzák. Az adatbázismotor nem tárol és nem használ egyszerű szöveges kulcsokat.

    Az Always Encrypted-kulcsok kezelésével kapcsolatos további információkért tekintse meg az Always Encrypted kulcskezelésének áttekintését.

  2. A védelem biztosítása érdekében állítson be titkosítást adott adatbázisoszlopokhoz, amelyek bizalmas információkat tartalmaznak. Ehhez a lépéshez szükség lehet új, titkosított oszlopokkal rendelkező táblák létrehozására vagy a meglévő oszlopok és adatok titkosítására. Egy oszlop titkosításának konfigurálásakor adja meg a titkosítási algoritmus részleteit, az adatok védelmét szolgáló oszloptitkosítási kulcsot és a titkosítás típusát. Az Always Encrypted kétféle titkosítást támogat:

    • A determinisztikus titkosítás mindig ugyanazt a titkosított értéket hozza létre egy adott egyszerű szöveges értékhez. A determinisztikus titkosítással pontkereséseket, egyenlőségi illesztéseket, csoportosítást és indexelést végezhet titkosított oszlopokon. A jogosulatlan felhasználók azonban a titkosított oszlopok mintáinak vizsgálatával találhatnak ki információkat a titkosított értékekről, különösen akkor, ha a lehetséges titkosított értékek egy kis halmaza van, például igaz/hamis vagy észak/délkelet/keleti/nyugati régió.

    • A véletlenszerű titkosítás olyan módszert használ, amely kiszámíthatatlanul titkosítja az adatokat. Minden azonos egyszerű szöveges bemenet külön titkosított kimenetet eredményez. Ez a módszer javítja a véletlenszerű titkosítás biztonságát.

Ha összehasonlító operátorok használatával, a titkosított oszlopok rendezésével és indexelésével szeretne mintaegyeztetést végezni, fogadja el az Always Encryptedt biztonságos enklávékkal , és alkalmazza a véletlenszerű titkosítást. Az Always Encrypted (biztonságos enklávék nélkül) véletlenszerű titkosítás nem támogatja a titkosított oszlopok keresését, csoportosítását, indexelését vagy összekapcsolását. Ehelyett a keresési vagy csoportosítási célokra szánt oszlopok esetében determinisztikus titkosítást kell használnia. Ez a titkosítási típus lehetővé teszi az olyan műveleteket, mint a pontkeresések, egyenlőségi illesztések, csoportosítás és indexelés titkosított oszlopokon.

Mivel az adatbázisrendszer tervezésénél fogva nem fér hozzá a titkosítási kulcsokhoz, az oszloptitkosításhoz az adatok adatbázison kívüli áthelyezése és titkosítása szükséges. A titkosítási folyamat hosszú időt vehet igénybe, és sebezhető a hálózati megszakításokkal szemben. Emellett, ha később újra kell titkosítania egy oszlopot, például a titkosítási kulcs elforgatásakor vagy a titkosítási típus módosításakor, ugyanezekkel a nehézségekkel szembesül. Az Always Encrypted biztonságos enklávékkal való használata szükségtelenné teszi az adatok adatbázisból való áthelyezését. Mivel az enklávé megbízható, az alkalmazás ügyfélillesztője vagy egy olyan eszköz, mint az SQL Server Management Studio (SSMS) biztonságosan megoszthatja a kulcsokat az enklávéval a titkosítási műveletek során. Az enklávé ezután titkosíthatja vagy újra titkosíthatja az oszlopokat a helyén, ami jelentősen csökkenti a műveletekhez szükséges időt.

Az Always Encrypted titkosítási algoritmusokkal kapcsolatos részletekért lásd: Always Encrypted titkosítás.

Az alábbi lépéseket sql-eszközökkel hajthatja végre:

Annak érdekében, hogy az Always Encrypted kulcsok és a védett bizalmas adatok soha ne legyenek natív formában felfedve az adatbázis-környezetben, az adatbázismotor nem végezhet kulcsok kiépítését, valamint adattitkosítási vagy visszafejtési műveleteket. Ezért a Transact-SQL (T-SQL) nem támogatja a kulcsok kiépítését és a titkosítási műveleteket. Ugyanezen okból a meglévő adatok titkosítását vagy újratitkosítását (más titkosítási típussal vagy oszloptitkosítási kulccsal) az adatbázison kívül kell végrehajtani (az SQL-eszközök automatizálhatják ezt).

A titkosított oszlopok definíciójának módosítása után hajtsa végre a sp_refresh_parameter_encryption az objektum Always Encrypted metaadatainak frissítéséhez.

Korlátozások

A titkosított oszlopokon lévő lekérdezésekre az alábbi korlátozások vonatkoznak:

  • Véletlenszerű titkosítással titkosított oszlopokon nem végezhet számításokat. A determinisztikus titkosítás az alábbi műveleteket támogatja, amelyek egyenlőségi összehasonlításokat is magukban foglalnak. Más műveletek nem engedélyezettek:

    Megjegyzés:

    Azoknak az alkalmazásoknak, amelyeknek mintaegyeztetést kell végezniük, használjon összehasonlító operátorokat, rendezési és indexelési műveleteket titkosított oszlopokon, implementálja az Always Encryptedt biztonságos enklávékkal.

  • Nem használhat olyan lekérdezési utasításokat, amelyek egyszerű szöveges és titkosított adatokat is tartalmazó számításokat aktiválnak. Például:

    • Titkosított oszlop és egyszerű szöveges oszlop vagy literál összehasonlítása.
    • Adatok másolása egyszerű szöveges oszlopból titkosított oszlopba (vagy fordítva) UPDATEvagy BULK INSERTSELECT INTOINSERT..SELECT.
    • Literálok beszúrása titkosított oszlopokba.

    Az ilyen utasítások az alábbihoz hasonló operandusütközési hibákat eredményeznek:

    Msg 206, Level 16, State 2, Line 89
        Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char
    

    Az alkalmazásoknak lekérdezési paraméterekkel kell megadniuk a titkosított oszlopok értékeit. Ha például titkosított oszlopokba szúr be adatokat, vagy determinisztikus titkosítással szűri őket, használjon lekérdezési paramétereket. A titkosított oszlopoknak megfelelő literális vagy T-SQL-változók átadása nem támogatott. A használt ügyfélillesztővel kapcsolatos további információkért lásd: Alkalmazások fejlesztése Always Encrypted használatával.

    Az SSMS-ben elengedhetetlen az Always Encrypted változók paraméterezésének alkalmazása a titkosított oszlopokhoz társított értékeket kezelő lekérdezések végrehajtásához. Ez a követelmény olyan forgatókönyveket is tartalmaz, mint például az adatok titkosított oszlopokba való beszúrása vagy szűrők alkalmazása (olyan esetekben, amikor determinisztikus titkosítást használnak).

  • A titkosított oszlopokat célzó táblaértékű paraméterek nem támogatottak.

  • A következő záradékokat használó lekérdezések nem támogatottak:

  • Az Always Encrypted nem támogatott az alábbi jellemzőkkel rendelkező oszlopok esetében:

    Fontos

    A Stretch Database elavult az SQL Server 2022 -ben (16.x) és az Azure SQL Database-ben. Ez a funkció az adatbázismotor egy későbbi verziójában lesz eltávolítva. Ne használja ezt a funkciót az új fejlesztési munkában, és tervezze meg a funkciót jelenleg használó alkalmazások módosítását.

    • Külső (PolyBase) táblák oszlopai (megjegyzés: a külső táblák és a titkosított oszlopokat tartalmazó táblák használata ugyanabban a lekérdezésben támogatott).
  • A következő funkciók nem működnek titkosított oszlopokon:

Always Encrypted Transact-SQL referencia

Az Always Encrypted a következő Transact-SQL utasításokat, rendszerkatalógus-nézeteket, rendszer által tárolt eljárásokat és engedélyeket használja.

Kimutatások

DDL utasítás Description
OSZLOPFŐKULCS LÉTREHOZÁSA Oszlop főkulcs metaadat-objektumának létrehozása egy adatbázisban
AZ OSZLOP FŐKULCSÁNAK ELVETÉSE Elvet egy oszlop főkulcsát egy adatbázisból.
OSZLOPTITKOSÍTÁSI KULCS LÉTREHOZÁSA Létrehoz egy oszloptitkosítási kulcs metaadat-objektumát.
OSZLOPTITKOSÍTÁSI KULCS MÓDOSÍTÁSA Módosítja az adatbázis oszloptitkosítási kulcsát, hozzáad vagy elvet egy titkosított értéket.
OSZLOPTITKOSÍTÁSI KULCS ELVETÉSE Egy oszloptitkosítási kulcs eltávolítása az adatbázisból.
TÁBLA LÉTREHOZÁSA (TITKOSÍTOTT) Oszlopok titkosítását adja meg

Rendszerkatalógus-nézetek és tárolt eljárások

Rendszerkatalógus-nézetek és tárolt eljárások Description
sys.column_encryption_keys Az oszloptitkosítási kulcsokkal (CEK-kkal) kapcsolatos információkat adja vissza
sys.column_encryption_key_values Adatokat ad vissza az oszloptitkosítási kulcsok (CEK-k) titkosított értékeiről
sys.column_master_keys Egy sort ad vissza az egyes adatbázis-főkulcsokhoz
sp_refresh_parameter_encryption Frissíti az Always Encrypted metaadatait a megadott nem sémaalapú tárolt eljárás, felhasználó által definiált függvény, nézet, DML-eseményindító, adatbázisszintű DDL-eseményindító vagy kiszolgálószintű DDL-eseményindító paramétereihez
sp_describe_parameter_encryption Elemzi a megadott Transact-SQL utasítást és paramétereit annak meghatározásához, hogy mely paraméterek felelnek meg az Always Encrypted funkcióval védett adatbázisoszlopoknak.

Az egyes oszlopokhoz tárolt titkosítási metaadatokkal kapcsolatos információkért tekintse meg a sys.columns című témakört.

Adatbázis-engedélyek

Az Always Encrypted négy adatbázis-engedélyt használ.

Rendszerkatalógus-nézetek és tárolt eljárások Description
ALTER ANY COLUMN MASTER KEY Az oszlop főkulcs-metaadatainak létrehozásához és törléséhez szükséges.
ALTER ANY COLUMN ENCRYPTION KEY Oszloptitkosítási kulcs metaadatainak létrehozásához és törléséhez szükséges.
VIEW ANY COLUMN MASTER KEY DEFINITION Az oszlop főkulcsának metaadatainak eléréséhez és olvasásához szükséges, amely a titkosított oszlopok lekérdezéséhez szükséges.
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION Az oszloptitkosítási kulcs metaadatainak eléréséhez és olvasásához szükséges, amely a titkosított oszlopok lekérdezéséhez szükséges.

Az alábbi táblázat összefoglalja a gyakori műveletekhez szükséges engedélyeket.

Forgatókönyv ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
Kulcskezelés (kulcs metaadatainak létrehozása, módosítása vagy áttekintése az adatbázisban) X X X X
Titkosított oszlopok lekérdezése X X

Fontos szempontok

  • A VIEW ANY COLUMN MASTER KEY DEFINITION és VIEW ANY COLUMN ENCRYPTION KEY DEFINITION engedélyekre van szükség a titkosított oszlopok kiválasztásakor. Ezek az engedélyek akkor is védik az oszlopokat, ha a felhasználó nem rendelkezik engedéllyel az oszlop főkulcsaihoz a kulcstárolókban, és nem fér hozzá egyszerű szöveghez.

  • Az SQL Serverben a nyilvános rögzített adatbázis szerepkör alapértelmezés szerint mindkettőt VIEW ANY COLUMN MASTER KEY DEFINITION és VIEW ANY COLUMN ENCRYPTION KEY DEFINITION engedélyeket is biztosít. Az adatbázisgazdák dönthetnek úgy, hogy visszavonják vagy megtagadják ezeket az engedélyeket a nyilvános szerepkörhöz, és adott szerepköröknek vagy felhasználóknak engedélyezik a korlátozottabb vezérlést.

  • SQL Database-ben a nyilvános rögzített adatbázis szerepkör alapértelmezés szerint nem adja meg a VIEW ANY COLUMN MASTER KEY DEFINITION és VIEW ANY COLUMN ENCRYPTION KEY DEFINITION engedélyeket. Ez a módosítás lehetővé teszi, hogy a DacFx régebbi verzióit használó meglévő eszközök megfelelően működjenek. A titkosított oszlopokkal való munkához (még ha nem is fejti vissza őket), az adatbázis-rendszergazdának kifejezetten meg kell adnia az VIEW ANY COLUMN MASTER KEY DEFINITION és VIEW ANY COLUMN ENCRYPTION KEY DEFINITION engedélyeket.

Következő lépés