sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man krypterar en vy i SQL Server

I SQL Server kan du kryptera en vy när du först skapar den, eller så kan du ändra den senare för att inkludera kryptering.

För att skapa en vy med T-SQL använder du CREATE VIEW syntax. För att kryptera den lägger du till WITH ENCRYPTION argument.

Du kan också använda samma argument för att kryptera en befintlig vy när du använder ALTER VIEW .

Den krypterade vyns text är inte direkt synlig i några katalogvyer. Därför kan vyns definition inte ses av användare som inte har tillgång till systemtabeller eller databasfiler.

Använder WITH ENCRYPTION förhindrar också att vyn publiceras som en del av SQL Server-replikering.

Exempel 1 – Skapa en krypterad vy

Här är ett exempel på hur du skapar en krypterad vy.

CREATE VIEW dbo.v_Cats
WITH ENCRYPTION
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Delen för att kryptera den är WITH ENCRYPTION . Jag kunde helt enkelt ta bort det argumentet om jag inte ville kryptera det.

Efter att ha skapat den vyn, nu när jag använder sys.sql_modules systemkatalogvy för att se dess definition får jag NULL.

SELECT definition 
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('dbo.v_Cats');

Resultat:

+--------------+
| definition   |
|--------------|
| NULL         |
+--------------+

Jag får samma resultat med de (utfasade) sys.syscomments katalogvy.

SELECT text
FROM sys.syscomments
WHERE id = OBJECT_ID('v_Cats');

Resultat:

+--------+
| text   |
|--------|
| NULL   |
+--------+

Jag får ett liknande resultat, oavsett vilken T-SQL-metod jag använder för att försöka få vyns definition.

Och här är felmeddelandet jag får i Azure Data Studio när jag försöker skripta vyn:

No script was returned when scripting as Create on object View

Och jag skulle få ett liknande meddelande om jag försökte visa det i SSMS, DBeaver eller någon annan programvara för GUI-databashantering.

Exempel 2 – Lägg till kryptering till en befintlig vy

Om du vill kryptera en befintlig vy, använd ALTER VIEW med samma definition. Med andra ord kan jag ta det första exemplet och ersätta CREATE med ALTER .

ALTER VIEW dbo.v_Cats
WITH ENCRYPTION
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Detta förutsätter uppenbarligen att resten av synens definition är exakt densamma som den befintliga uppfattningen.

Det enklaste sättet att säkerställa att du använder samma definition är att använda ditt GUI-verktyg för att skripta den befintliga vyn med alternativet "Script as Alter", om det finns. Annars kan du använda "Skript som Skapa", och sedan ändra CREATE när definitionen visas med ALTER .

Om du bara har ett kommandoradsgränssnitt kan du fråga sys.sql_modules visa för att få den befintliga definitionen (som i föregående exempel). Du kan sedan kopiera definitionen och ersätta CREATE med ALTER .

När du har gjort det kan du lägga till WITH ENCRYPTION och kör det igen.

Exempel 3 – Lägga till flera attribut

Kryptering är bara ett av flera attribut som du kan inkludera i din vys definition. Om du behöver ange flera attribut, separera dem med ett kommatecken.

Till exempel, om du vill använda kryptering och du vill ange schemabindning måste du lägga till dessa som en kommaseparerad lista.

ALTER VIEW dbo.v_Cats
WITH ENCRYPTION, SCHEMABINDING
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

  1. Trunkera (inte runda) decimaler i SQL Server

  2. hur man ändrar datum till tid i oracle 10g

  3. SQL känner inte igen kolumnaliaset i where-satsen

  4. PostgreSQL var allt i array