В SQL Server можете да шифровате изглед в момента, в който го създадете за първи път, или можете да го промените по-късно, за да включите криптиране.
За да създадете изглед с T-SQL, използвате CREATE VIEW
синтаксис. За да го шифровате, добавяте WITH ENCRYPTION
аргумент.
Можете също да използвате същия аргумент за шифроване на съществуващ изглед, когато използвате ALTER VIEW
.
Текстът на криптирания изглед не се вижда директно в нито един изглед на каталог. Следователно дефиницията на изгледа не може да бъде видяна от потребители, които нямат достъп до системни таблици или файлове на базата данни.
Използване на WITH ENCRYPTION
също така предотвратява публикуването на изгледа като част от репликацията на SQL Server.
Пример 1 – Създайте шифрован изглед
Ето пример за създаване на шифрован изглед.
CREATE VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Частта за криптирането му е WITH ENCRYPTION
. Бих могъл просто да премахна този аргумент, ако не искам да го криптирам.
След като създадох този изглед, сега, когато използвам sys.sql_modules
изглед на системния каталог, за да видите неговата дефиниция, получавам NULL.
SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('dbo.v_Cats');
Резултат:
+--------------+ | definition | |--------------| | NULL | +--------------+
Получавам същия резултат с (оттеглените) sys.syscomments
изглед на каталог.
SELECT text FROM sys.syscomments WHERE id = OBJECT_ID('v_Cats');
Резултат:
+--------+ | text | |--------| | NULL | +--------+
Получавам подобен резултат, независимо кой метод на T-SQL използвам, за да се опитам да получа дефиницията на изгледа.
И ето съобщението за грешка, което получавам в Azure Data Studio, когато се опитам да скриптира изгледа:
No script was returned when scripting as Create on object View
И бих получил подобно съобщение, ако се опитам да го видя в SSMS, DBeaver или друг софтуер за управление на база данни с GUI.
Пример 2 – Добавете криптиране към съществуващ изглед
Ако искате да шифровате съществуващ изглед, използвайте ALTER VIEW
със същото определение. С други думи, мога да взема първия пример и да заменя CREATE
с ALTER
.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Това очевидно предполага, че останалата част от дефиницията на изгледа е точно същата като съществуващия изглед.
Най-лесният начин да се уверите, че използвате една и съща дефиниция, е да използвате вашия GUI инструмент, за да скриптирате съществуващия изглед, като използвате опцията „Script as Alter“, ако съществува. В противен случай можете да използвате „Script as Create“, след което, когато се появи дефиницията, променете CREATE
с ALTER
.
Ако имате само интерфейс на командния ред, можете да потърсите sys.sql_modules
преглед, за да получите съществуващата дефиниция (както в предишния пример). След това можете да копирате дефиницията и да замените CREATE
с ALTER
.
След като направите това, можете да добавите WITH ENCRYPTION
и го стартирайте отново.
Пример 3 – Добавяне на множество атрибути
Шифроването е само един от няколкото атрибута, които можете да включите в определението на изгледа си. Ако трябва да посочите няколко атрибута, разделете ги със запетая.
Например, ако искате да използвате криптиране и искате да зададете обвързване на схемата, тогава ще трябва да ги добавите като списък, разделен със запетая.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION, SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO