Konfigurálja az oszloptitkosítást helyben a Transact-SQL használatával

A következőkre vonatkozik: SQL Server 2019 (15.x) és újabb verziók Windows Azure SQL Database-en

Ez a cikk bemutatja, hogyan hajthatók végre kriptográfiai műveletek közvetlenül az oszlopokon az Always Encrypted biztonságos enklávékkal funkcióval és az ALTER TABLE utasítás/ALTER COLUMN használatával. A helyszíni titkosítással és az általános előfeltételekkel kapcsolatos alapvető információkért lásd: Az oszloptitkosítás helyben történő konfigurálása az Always Encrypted használatával biztonságos enklávékkal.

A ALTER TABLE vagy ALTER COLUMN utasítással beállíthatja egy oszlop céltitkosítási konfigurációját. Az utasítás végrehajtásakor a kiszolgálóoldali biztonságos enklávé titkosítja, újra titkosítja vagy visszafejti az oszlopban tárolt adatokat az utasítás oszlopdefiníciójában megadott aktuális és céltitkosítási konfigurációtól függően.

  • Ha az oszlop jelenleg nincs titkosítva, akkor titkosítva lesz, ha megadja a ENCRYPTED WITH záradékot az oszlopdefinícióban.
  • Ha az oszlop jelenleg titkosítva van, az vissza lesz fejtve (egyszerű szöveges oszlopmá konvertálva), ha nem adja meg a ENCRYPTED WITH záradékot az oszlopdefinícióban.
  • Ha az oszlop jelenleg titkosítva van, a rendszer újra titkosítja, ha megadja a ENCRYPTED WITH záradékot, és a megadott oszloptitkosítási típus vagy az oszloptitkosítási kulcs eltér a jelenleg használt titkosítási típustól vagy az oszloptitkosítási kulcstól.

Jegyzet

Egyetlen utasításban nem kombinálhatja a titkosítási műveleteket más módosításokkal ALTER TABLE/ALTER COLUMN , kivéve az oszlop NULLNOT NULLvagy a rendezés módosítását. Nem titkosíthat például egy oszlopot, és nem módosíthatja az oszlop adattípusát egyetlen ALTER TABLE/ALTER COLUMN Transact-SQL utasításban. Két külön utasítást használjon.

Mint minden olyan lekérdezésnél, amely kiszolgálóoldali biztonságos enklávét használ, olyan utasítást ALTER TABLE/ALTER COLUMN kell küldenie, amely helyi titkosítást aktivál az Always Encrypted és az enklávé számításokkal engedélyezett kapcsolaton keresztül.

A cikk további része azt ismerteti, hogyan aktiválható a helyszíni titkosítás az SQL Server Management Studio ALTER TABLE/ALTER COLUMN utasításával. Alternatív megoldásként kiadhatja a ALTER TABLE/ALTER COLUMN parancsot a Visual Studio Code-ból vagy az alkalmazásából.

Jegyzet

Az SqlServer PowerShell modulban és az sqlcmdben található Invoke-Sqlcmd parancsmag jelenleg nem támogatja a helyszíni titkosítási műveletek használatátALTER TABLE/ALTER COLUMN.

Helyszíni titkosítás végrehajtása Transact-SQL az SSMS-ben

Előfeltételek

Lépések

  1. Nyisson meg egy lekérdezési ablakot az Always Encrypted és az enklávé számítások engedélyezésével az adatbázis-kapcsolatban. További információ: Always Encrypted engedélyezése és letiltása adatbázis-kapcsolathoz.

  2. A lekérdezési ablakban futtassa az utasítást ALTER TABLE/ALTER COLUMN . Adja meg a titkosítani, visszafejtenni vagy újratitkosítani kívánt oszlop céltitkosítási konfigurációját. Ha az oszlopot titkosítja vagy újra titkosítja, használja a ENCRYPTED WITH záradékot. Ha az oszlop egy sztringoszlop (például char, varchar, nchar, nvarchar), előfordulhat, hogy a rendezést BIN2 rendezésre is módosítania kell.

    Jegyzet

    Ha az oszlop főkulcsa az Azure Key Vaultban van tárolva, előfordulhat, hogy a rendszer kérni fogja, hogy jelentkezzen be az Azure-ba.

  3. A paraméterek titkosítási információinak frissítése érdekében törölje a terv gyorsítótárát minden táblához hozzáférő köteg és tárolt eljárás esetében.

    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Jegyzet

    Ha nem távolítja el az érintett lekérdezés tervét a gyorsítótárból, a lekérdezés titkosítás utáni első végrehajtása sikertelen lehet.

    A tervgyorsítótár törléséhez körültekintően használja a ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE vagy DBCC FREEPROCCACHE jelöléseket, mivel ez ideiglenes lekérdezési teljesítménycsökkenést eredményezhet. A gyorsítótár kiürítésének negatív hatásának minimalizálása érdekében csak az érintett lekérdezések terveit távolíthatja el szelektíven.

  4. Hívja meg sp_refresh_parameter_encryption , hogy frissítse az egyes modulok (tárolt eljárás, függvény, nézet, eseményindító) paramétereinek metaadatait, amelyek a sys.parametersben vannak tárolva, és az oszlopok titkosításával érvénytelenné válhatnak.

Példák

Az oszlop titkosítása helyben

A következő példa a következőket feltételezi:

  • CEK1 egy enklávé-kompatibilis oszloptitkosítási kulcs.
  • A SSN oszlop egyszerű szöveg, és jelenleg az alapértelmezett adatbázis-rendezést használja, például Latin1, nem BIN2 rendezést (például Latin1_General_CI_AI_KS_WS).

Az utasítás determinisztikus titkosítással és az enklávéval kompatibilis oszloptitkosítási kulccsal titkosítja a SSN oszlopot. Felülírja az alapértelmezett adatbázis-rendezést is a megfelelő (ugyanazon kódoldalon) BIN2 rendezéssel.

A műveletet online (ONLINE = ON) hajtja végre. Jegyezze fel a(z) ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE hívást, amely újraalkotja a táblaséma módosítása által érintett lekérdezések terveit.

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] CHAR (11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (
    COLUMN_ENCRYPTION_KEY = [CEK1],
    ENCRYPTION_TYPE = DETERMINISTIC,
    ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
) NOT NULL WITH (ONLINE = ON);
GO

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

Az oszlop titkosításának típusát helyben újratitkosítva módosítani

A következő példa a következőket feltételezi:

  • A SSN oszlop determinisztikus titkosítással és enklávé-kompatibilis oszloptitkosítási kulccsal van titkosítva, CEK1.
  • Az oszlopszinten beállított jelenlegi rendezés a következő: Latin1_General_BIN2.

Az alábbi utasítás véletlenszerű titkosítással és ugyanazzal a kulccsal (CEK1) újra titkosítja az oszlopot.

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] CHAR (11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (
    COLUMN_ENCRYPTION_KEY = [CEK1],
    ENCRYPTION_TYPE = RANDOMIZED,
    ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
) NOT NULL;
GO

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

Oszlop helybeni újratitkosítása az oszloptitkosítási kulcs forgatásához

A következő példa a következőket feltételezi:

  • A SSN oszlop véletlenszerű titkosítással és enklávé-kompatibilis oszloptitkosítási kulccsal van titkosítva, CEK1.
  • CEK2 egy enklávé-kompatibilis oszloptitkosítási kulcs, amely eltér a CEK1-től.
  • Az oszlopszinten beállított jelenlegi rendezés a következő: Latin1_General_BIN2.

Az alábbi utasítás újra titkosítja az oszlopot a következővel CEK2:

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] CHAR (11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (
    COLUMN_ENCRYPTION_KEY = [CEK2],
    ENCRYPTION_TYPE = RANDOMIZED,
    ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
) NOT NULL;
GO

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

Oszlop visszafejtése közvetlenül

A következő példa a következőket feltételezi:

  • A SSN oszlop titkosítása enklávé-kompatibilis oszloptitkosítási kulccsal történik.
  • Az oszlopszinten beállított jelenlegi rendezés a következő: Latin1_General_BIN2.

Az alábbi utasítás visszafejti az oszlopot, és változatlanul tartja a kollációt. Másik lehetőségként módosíthatja a rendezést. Módosítsa például a rendezést nem BIN2 rendezésre ugyanabban az utasításban.

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] CHAR (11) COLLATE Latin1_General_BIN2
WITH (ONLINE = ON);
GO

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;