sql >> Databáze >  >> RDS >> Sqlserver

Jak zašifrovat pohled na SQL Server

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

  1. Dvě zvláštnosti rozdělení

  2. Příkaz CASE v klauzuli WHERE v SQL Server 2008

  3. 6 důvodů, proč může Microsoft Access pomoci vaší firmě

  4. Tabulka chyb Mysql 1050 již existuje, i když ve skutečnosti neexistuje