Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come crittografare una vista in SQL Server

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