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