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