In SQL Server kunt u een weergave versleutelen op het moment dat u deze voor het eerst maakt, of u kunt deze later wijzigen om versleuteling op te nemen.
Om een weergave te maken met T-SQL, gebruik je de CREATE VIEW
syntaxis. Om het te versleutelen, voeg je de WITH ENCRYPTION
. toe argument.
U kunt hetzelfde argument ook gebruiken om een bestaande weergave te versleutelen bij gebruik van ALTER VIEW
.
De tekst van de versleutelde weergave is niet direct zichtbaar in catalogusweergaven. Daarom kan de definitie van de weergave niet worden bekeken door gebruikers die geen toegang hebben tot systeemtabellen of databasebestanden.
WITH ENCRYPTION
gebruiken voorkomt ook dat de weergave wordt gepubliceerd als onderdeel van SQL Server-replicatie.
Voorbeeld 1 – Maak een versleutelde weergave
Hier is een voorbeeld van het maken van een versleutelde weergave.
CREATE VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Het deel om het te versleutelen is WITH ENCRYPTION
. Ik zou dat argument gewoon kunnen verwijderen als ik het niet wilde versleutelen.
Na het maken van die weergave, nu wanneer ik de sys.sql_modules
. gebruik systeemcatalogusweergave om de definitie ervan te bekijken, krijg ik NULL.
SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('dbo.v_Cats');
Resultaat:
+--------------+ | definition | |--------------| | NULL | +--------------+
Ik krijg hetzelfde resultaat met de (verouderde) sys.syscomments
catalogusweergave.
SELECT text FROM sys.syscomments WHERE id = OBJECT_ID('v_Cats');
Resultaat:
+--------+ | text | |--------| | NULL | +--------+
Ik krijg een soortgelijk resultaat, ongeacht welke T-SQL-methode ik gebruik om te proberen de definitie van de weergave te krijgen.
En hier is de foutmelding die ik krijg in Azure Data Studio wanneer ik de view probeer te scripten:
No script was returned when scripting as Create on object View
En ik zou een soortgelijk bericht krijgen als ik het probeerde te bekijken in SSMS, DBeaver of een andere GUI-databasebeheersoftware.
Voorbeeld 2 – Codering toevoegen aan een bestaande weergave
Als u een bestaande weergave wilt versleutelen, gebruikt u ALTER VIEW
met dezelfde definitie. Met andere woorden, ik kan het eerste voorbeeld nemen en CREATE
. vervangen met ALTER
.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Dit veronderstelt uiteraard dat de rest van de definitie van de weergave exact hetzelfde is als de bestaande weergave.
De eenvoudigste manier om ervoor te zorgen dat u dezelfde definitie gebruikt, is door uw GUI-tool te gebruiken om de bestaande weergave te scripten met behulp van de optie "Script as Alter", als deze bestaat. Anders zou je "Script as Create" kunnen gebruiken, en als de definitie verschijnt, verander CREATE
met ALTER
.
Als u alleen een opdrachtregelinterface heeft, kunt u de sys.sql_modules
opvragen bekijken om de bestaande definitie te krijgen (zoals in het vorige voorbeeld). U kunt dan de definitie kopiëren en CREATE
vervangen met ALTER
.
Zodra je dat hebt gedaan, kun je WITH ENCRYPTION
. toevoegen en voer het opnieuw uit.
Voorbeeld 3 – Meerdere attributen toevoegen
Versleuteling is slechts een van de vele kenmerken die u kunt opnemen in de definitie van uw weergave. Als u meerdere kenmerken moet opgeven, scheidt u deze door een komma.
Als u bijvoorbeeld codering en . wilt gebruiken u schemabinding wilt specificeren, dan moet u deze toevoegen als een door komma's gescheiden lijst.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION, SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO