Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como criptografar uma exibição no SQL Server


No SQL Server, você pode criptografar uma exibição no momento em que a cria ou pode alterá-la posteriormente para incluir a criptografia.

Para criar uma visão com T-SQL, você usa o CREATE VIEW sintaxe. Para criptografá-lo, você adiciona o WITH ENCRYPTION argumento.

Você também pode usar o mesmo argumento para criptografar uma visualização existente ao usar ALTER VIEW .



O texto da exibição criptografada não é diretamente visível em nenhuma exibição de catálogo. Portanto, a definição da visão não pode ser visualizada por usuários que não têm acesso a tabelas do sistema ou arquivos de banco de dados.

Usando WITH ENCRYPTION também impede que a exibição seja publicada como parte da replicação do SQL Server.

Exemplo 1 – Criar uma visualização criptografada


Aqui está um exemplo de criação de uma visualização criptografada.
CREATE VIEW dbo.v_Cats
WITH ENCRYPTION
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

A parte para criptografar é WITH ENCRYPTION . Eu poderia simplesmente remover esse argumento se não quisesse criptografá-lo.

Depois de criar essa view, agora quando uso o sys.sql_modules visualização do catálogo do sistema para ver sua definição, recebo NULL.
SELECT definition 
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('dbo.v_Cats');

Resultado:
+--------------+
| definition   |
|--------------|
| NULL         |
+--------------+

Eu recebo o mesmo resultado com o (obsoleto) sys.syscomments visualização do catálogo.
SELECT text
FROM sys.syscomments
WHERE id = OBJECT_ID('v_Cats');

Resultado:
+--------+
| text   |
|--------|
| NULL   |
+--------+

Obtenho um resultado semelhante, independentemente de qual método T-SQL eu uso para tentar obter a definição da exibição.

E aqui está a mensagem de erro que recebo no Azure Data Studio quando tento fazer o script da exibição:
No script was returned when scripting as Create on object View

E eu receberia uma mensagem semelhante se tentasse visualizá-la no SSMS, DBeaver ou qualquer outro software de gerenciamento de banco de dados GUI.

Exemplo 2 – Adicionar criptografia a uma visualização existente


Se você deseja criptografar uma visualização existente, use ALTER VIEW com a mesma definição. Em outras palavras, posso pegar o primeiro exemplo e substituir CREATE com ALTER .
ALTER VIEW dbo.v_Cats
WITH ENCRYPTION
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Isso obviamente pressupõe que o restante da definição da visão é exatamente a mesma que a visão existente.

A maneira mais fácil de garantir que você está usando a mesma definição é usar sua ferramenta GUI para fazer o script da visualização existente usando a opção “Script as Alter”, se ela existir. Caso contrário, você pode usar “Script as Create” e, quando a definição aparecer, altere CREATE com ALTER .

Se você tiver apenas uma interface de linha de comando, poderá consultar o sys.sql_modules view para obter a definição existente (como no exemplo anterior). Você pode então copiar a definição e substituir CREATE com ALTER .

Depois de fazer isso, você pode adicionar WITH ENCRYPTION e execute-o novamente.

Exemplo 3 – Adicionando vários atributos


A criptografia é apenas um dos vários atributos que você pode incluir na definição da sua visualização. Se você precisar especificar vários atributos, separe-os por uma vírgula.

Por exemplo, se você quiser usar criptografia e você deseja especificar a vinculação de esquema, então você precisa adicioná-los como uma lista separada por vírgulas.
ALTER VIEW dbo.v_Cats
WITH ENCRYPTION, SCHEMABINDING
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO