In SQL Server puoi crittografare una vista al momento della creazione o modificarla in un secondo momento per includere la crittografia.
Per creare una vista con T-SQL, usa CREATE VIEW
sintassi. Per crittografarlo, aggiungi il WITH ENCRYPTION
argomento.
Puoi anche utilizzare lo stesso argomento per crittografare una vista esistente quando usi ALTER VIEW
.
Il testo della vista crittografata non è direttamente visibile in nessuna vista del catalogo. Pertanto, la definizione della vista non può essere visualizzata dagli utenti che non hanno accesso alle tabelle di sistema o ai file di database.
Utilizzo di WITH ENCRYPTION
impedisce inoltre la pubblicazione della vista come parte della replica di SQL Server.
Esempio 1:creare una vista crittografata
Ecco un esempio di creazione di una vista crittografata.
CREATE VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
La parte per la crittografia è WITH ENCRYPTION
. Potrei semplicemente rimuovere quell'argomento se non volessi crittografarlo.
Dopo aver creato quella vista, ora utilizzo il sys.sql_modules
vista del catalogo di sistema per visualizzarne la definizione, ottengo NULL.
SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('dbo.v_Cats');
Risultato:
+--------------+ | definition | |--------------| | NULL | +--------------+
Ottengo lo stesso risultato con sys.syscomments
(obsoleto). vista catalogo.
SELECT text FROM sys.syscomments WHERE id = OBJECT_ID('v_Cats');
Risultato:
+--------+ | text | |--------| | NULL | +--------+
Ottengo un risultato simile, indipendentemente dal metodo T-SQL che utilizzo per cercare di ottenere la definizione della vista.
Ed ecco il messaggio di errore che ricevo in Azure Data Studio quando provo a eseguire lo script della vista:
No script was returned when scripting as Create on object View
E otterrei un messaggio simile se provassi a visualizzarlo in SSMS, DBeaver o qualsiasi altro software di gestione del database della GUI.
Esempio 2:aggiunta della crittografia a una vista esistente
Se vuoi crittografare una vista esistente, usa ALTER VIEW
con la stessa definizione. In altre parole, posso prendere il primo esempio e sostituire CREATE
con ALTER
.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Ciò ovviamente presuppone che il resto della definizione della vista sia esattamente la stessa della vista esistente.
Il modo più semplice per assicurarti di utilizzare la stessa definizione è utilizzare lo strumento GUI per creare uno script della vista esistente utilizzando l'opzione "Script as Alter", se esiste. Altrimenti potresti usare "Script come Crea", quindi quando appare la definizione, cambia CREATE
con ALTER
.
Se hai solo un'interfaccia a riga di comando, puoi interrogare sys.sql_modules
view per ottenere la definizione esistente (come nell'esempio precedente). Puoi quindi copiare la definizione e sostituire CREATE
con ALTER
.
Dopo averlo fatto, puoi aggiungere WITH ENCRYPTION
ed eseguilo di nuovo.
Esempio 3 – Aggiunta di più attributi
La crittografia è solo uno dei numerosi attributi che puoi includere nella definizione della tua vista. Se devi specificare più attributi, separali con una virgola.
Ad esempio, se desideri utilizzare la crittografia e vuoi specificare il binding dello schema, quindi dovresti aggiungerli come un elenco separato da virgole.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION, SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO