Megosztás a következőn keresztül:


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. Lehetővé teszi az ügyfelek számára a bizalmas adatok titkosítását az ügyfélalkalmazások között, biztosítva, hogy a titkosítási kulcsok soha ne legyenek elérhetők az adatbázismotor számára. Ez elkülönítést biztosít az adatok tulajdonosai é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, a szűrést (kivéve a determinisztikus titkosítást használó pontkereséseket), stb. Ez 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éloldalon 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, összehasonlító operátorokat, rendezést és indexelést kell használniuk a titkosított oszlopokon, az Always Encryptedt biztonságos enklávékkal kell implementálni.

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 a titkosított oszlopon belüli adatok titkosítására szolgál. 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 kell tárolnia, például az Azure Key Vaultban, a Windows tanúsítványtárolójában vagy egy hardveres biztonsági modulban. Ezt követően elő kell készítenie az oszloptitkosítási kulcsokat, és mindegyiket egy oszlop főkulcsával kell titkosítania.

    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 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 meg kell adnia 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. Lehetővé teheti azonban, hogy a jogosulatlan felhasználók a titkosított oszlop mintáinak vizsgálatával találják meg a titkosított értékekre vonatkozó információkat, 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 javítja a véletlenszerű titkosítás biztonságát.

Ha összehasonlító operátorokkal, rendezéssel és indexeléssel szeretne mintaegyeztetést végezni a titkosított oszlopokon, az Always Encryptedt biztonságos enklávékkal kell alkalmaznia, és véletlenszerű titkosítást kell alkalmaznia. 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 elengedhetetlen a determinisztikus titkosítás használata. Ez 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. Ez azt jelenti, hogy ez 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 fog szembesülni. 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 Azure Data Studio vagy 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.

A fenti 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 egyszerű szövegesen felfedve az adatbázis-környezetben, az adatbázismotor nem vehet részt a kulcsok kiépítésében és az adatok titkosításában, illetve a visszafejtési műveletekben. 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:

  • Nem engedélyezett számítások véletlenszerű titkosítással titkosított oszlopokon. A determinisztikus titkosítás a következő műveleteket támogatja egyenlőségi összehasonlításokkal – más műveletek nem engedélyezettek.

    Megjegyzés:

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

  • Az egyszerű szöveges és a titkosított adatokat is érintő számításokat kiváltó lekérdezési utasítások nem engedélyezettek. 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) UPDATE, BULK INSERT, SELECT INTO vagy INSERT..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, lekérdezési paramétereket kell használnia. Nem támogatott a titkosított oszlopoknak megfelelő literális vagy T-SQL-változók átadása. 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 Azure Data Studióban vagy az SSMS-ben elengedhetetlen az Always Encrypted változók paraméterezésének alkalmazása a titkosított oszlopokhoz tartozó értékeket kezelő lekérdezések végrehajtásához. Ez olyan eseteket is magában foglal, 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 Leírás
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 Leírás
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 lásd a sys.columns című témakört.

Adatbázis-engedélyek

Az Always Encrypted négy adatbázis-engedélyből áll.

Rendszerkatalógus-nézetek és tárolt eljárások Leírás
BÁRMELY OSZLOP MESTERKULCSÁNAK MÓDOSÍTÁSA Az oszlop főkulcs-metaadatainak létrehozásához és törléséhez szükséges.
BÁRMELY OSZLOPTITKOSÍTÁSI KULCS MÓDOSÍTÁSA Oszloptitkosítási kulcs metaadatainak létrehozásához és törléséhez szükséges.
BÁRMELY OSZLOP FŐKULCSDEFINÍCIÓJÁNAK MEGTEKINTÉSE 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.
OSZLOPTITKOSÍTÁSI KULCS DEFINÍCIÓJÁNAK MEGTEKINTÉSE 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 BÁRMELY OSZLOP MESTERKULCSÁNAK MÓDOSÍTÁSA BÁRMELY OSZLOPTITKOSÍTÁSI KULCS MÓDOSÍTÁSA BÁRMELY OSZLOP FŐKULCSDEFINÍCIÓJÁNAK MEGTEKINTÉSE BÁRMELY OSZLOPTITKOSÍTÁSI KULCS DEFINÍCIÓJÁNAK MEGTEKINTÉSE
Kulcskezelés (kulcs metaadatainak létrehozása/módosítása/áttekintése az adatbázisban) X X X X
Titkosított oszlopok lekérdezése X X

Fontos szempontok

  • Amikor titkosított oszlopokat választunk ki, a VIEW ANY COLUMN MASTER KEY DEFINITION és a VIEW ANY COLUMN ENCRYPTION KEY DEFINITION engedélyekre van szükség, még akkor is, ha a felhasználó nem rendelkezik engedéllyel az oszlop főkulcsaira (a kulcstárolókban). Ez megvédi az oszlopokat, és megakadályozza a nyílt szöveges hozzáférési kísérleteket.

  • Az SQL Serverben mind a VIEW ANY COLUMN MASTER KEY DEFINITION, mind a VIEW ANY COLUMN ENCRYPTION KEY DEFINITION engedélyek alapértelmezés szerint a nyilvános rögzített adatbázis-szerepkörhöz vannak megadva. Az adatbázisgazdák dönthetnek úgy, hogy visszavonják (vagy elutasítják) a nyilvános szerepkörre vonatkozó engedélyeket, és adott szerepköröknek vagy felhasználóknak engedélyezik a korlátozottabb vezérlés megvalósítását.

  • Az SQL Database-ben a VIEW ANY COLUMN MASTER KEY DEFINITION és a VIEW ANY COLUMN ENCRYPTION KEY DEFINITION engedélyek alapértelmezés szerint nincsenek megadva a public rögzített adatbázis-szerepkör számára. Ez lehetővé teszi bizonyos meglévő örökölt eszközök (a DacFx régebbi verzióinak használata) megfelelő működését. A titkosított oszlopok használatához (még ha nem is fejti vissza őket) az adatbázis-rendszergazdának explicit módon meg kell adnia a VIEW ANY COLUMN MASTER KEY DEFINITION ésVIEW ANY COLUMN ENCRYPTION KEY DEFINITION engedélyeket.

Következő lépés