Na serveru SQL Server můžete zašifrovat pohled při prvním vytvoření, nebo jej můžete později upravit tak, aby zahrnoval šifrování.
Chcete-li vytvořit pohled pomocí T-SQL, použijte CREATE VIEW
syntax. Chcete-li jej zašifrovat, přidejte WITH ENCRYPTION
argument.
Stejný argument můžete také použít k zašifrování existujícího pohledu při použití ALTER VIEW
.
Text zašifrovaného pohledu není přímo viditelný v žádném zobrazení katalogu. Definici pohledu proto nemohou zobrazit uživatelé, kteří nemají přístup k systémovým tabulkám nebo databázovým souborům.
Pomocí WITH ENCRYPTION
také zabraňuje publikování pohledu jako součást replikace SQL Server.
Příklad 1 – Vytvoření šifrovaného zobrazení
Zde je příklad vytvoření šifrovaného zobrazení.
CREATE VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Část pro šifrování je WITH ENCRYPTION
. Mohl bych tento argument jednoduše odstranit, pokud bych jej nechtěl šifrovat.
Po vytvoření tohoto pohledu nyní, když používám sys.sql_modules
zobrazení systémového katalogu pro zobrazení jeho definice, dostanu NULL.
SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('dbo.v_Cats');
Výsledek:
+--------------+ | definition | |--------------| | NULL | +--------------+
Mám stejný výsledek s (zastaralým) sys.syscomments
zobrazení katalogu.
SELECT text FROM sys.syscomments WHERE id = OBJECT_ID('v_Cats');
Výsledek:
+--------+ | text | |--------| | NULL | +--------+
Dostávám podobný výsledek, bez ohledu na to, kterou metodu T-SQL použiji, abych se pokusil získat definici pohledu.
A tady je chybová zpráva, kterou dostanu v Azure Data Studio, když se pokusím skriptovat zobrazení:
No script was returned when scripting as Create on object View
A podobnou zprávu bych dostal, kdybych se ji pokusil zobrazit v SSMS, DBeaver nebo jiném softwaru pro správu databází GUI.
Příklad 2 – Přidání šifrování do existujícího zobrazení
Pokud chcete zašifrovat existující zobrazení, použijte ALTER VIEW
se stejnou definicí. Jinými slovy, mohu vzít první příklad a nahradit CREATE
pomocí ALTER
.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
To samozřejmě předpokládá, že zbytek definice pohledu je přesně stejný jako stávající pohled.
Nejjednodušší způsob, jak zajistit, že používáte stejnou definici, je použít nástroj GUI ke skriptování existujícího pohledu pomocí možnosti „Script as Alter“, pokud existuje. V opačném případě můžete použít „Script as Create“, a když se objeví definice, změňte CREATE
pomocí ALTER
.
Pokud máte pouze rozhraní příkazového řádku, můžete se zeptat na sys.sql_modules
zobrazit, abyste získali existující definici (jako v předchozím příkladu). Poté můžete zkopírovat definici a nahradit CREATE
pomocí ALTER
.
Jakmile to uděláte, můžete přidat WITH ENCRYPTION
a spusťte jej znovu.
Příklad 3 – Přidání více atributů
Šifrování je jen jedním z několika atributů, které můžete zahrnout do definice zobrazení. Pokud potřebujete zadat více atributů, oddělte je čárkou.
Pokud například chcete použít šifrování a chcete určit vazbu schématu, pak byste je museli přidat jako seznam oddělený čárkami.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION, SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO