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