I SQL Server kan du kryptere en visning på det tidspunkt, du først opretter den, eller du kan ændre den senere for at inkludere kryptering.
For at oprette en visning med T-SQL, bruger du CREATE VIEW
syntaks. For at kryptere det, tilføjer du WITH ENCRYPTION
argument.
Du kan også bruge det samme argument til at kryptere en eksisterende visning, når du bruger ALTER VIEW
.
Den krypterede visnings tekst er ikke direkte synlig i nogen katalogvisninger. Derfor kan visningens definition ikke ses af brugere, der ikke har adgang til systemtabeller eller databasefiler.
Brug af WITH ENCRYPTION
forhindrer også visningen i at blive publiceret som en del af SQL Server-replikering.
Eksempel 1 – Opret en krypteret visning
Her er et eksempel på oprettelse af en krypteret visning.
CREATE VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Delen til at kryptere den er WITH ENCRYPTION
. Jeg kunne simpelthen fjerne det argument, hvis jeg ikke ville kryptere det.
Efter at have oprettet den visning, nu når jeg bruger sys.sql_modules
systemkatalogvisning for at se dens definition, får jeg NULL.
SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('dbo.v_Cats');
Resultat:
+--------------+ | definition | |--------------| | NULL | +--------------+
Jeg får det samme resultat med de (forældede) sys.syscomments
katalogvisning.
SELECT text FROM sys.syscomments WHERE id = OBJECT_ID('v_Cats');
Resultat:
+--------+ | text | |--------| | NULL | +--------+
Jeg får et lignende resultat, uanset hvilken T-SQL-metode jeg bruger til at forsøge at få visningens definition.
Og her er fejlmeddelelsen, jeg får i Azure Data Studio, når jeg prøver at scripte visningen:
No script was returned when scripting as Create on object View
Og jeg ville få en lignende besked, hvis jeg prøvede at se den i SSMS, DBeaver eller enhver anden GUI-databasestyringssoftware.
Eksempel 2 – Tilføj kryptering til en eksisterende visning
Hvis du vil kryptere en eksisterende visning, skal du bruge ALTER VIEW
med samme definition. Med andre ord kan jeg tage det første eksempel og erstatte CREATE
med ALTER
.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Dette forudsætter naturligvis, at resten af synspunktets definition er nøjagtig den samme som den eksisterende opfattelse.
Den nemmeste måde at sikre, at du bruger den samme definition på, er at bruge dit GUI-værktøj til at scripte den eksisterende visning ved hjælp af "Script as Alter", hvis den findes. Ellers kan du bruge "Script som Opret", og derefter ændre CREATE
, når definitionen vises med ALTER
.
Hvis du kun har en kommandolinjegrænseflade, kan du forespørge på sys.sql_modules
view for at få den eksisterende definition (som i det foregående eksempel). Du kan derefter kopiere definitionen og erstatte CREATE
med ALTER
.
Når du har gjort det, kan du tilføje WITH ENCRYPTION
og kør det igen.
Eksempel 3 – Tilføjelse af flere attributter
Kryptering er blot en af flere attributter, du kan inkludere i din visnings definition. Hvis du har brug for at angive flere attributter, skal du adskille dem med et komma.
For eksempel, hvis du vil bruge kryptering og du vil angive skemabinding, så skal du tilføje disse som en kommasepareret liste.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION, SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO