Fui designado para pesquisar criptografia em nível de coluna, com o requisito adicional de sa
não poder ler a(s) coluna(s) criptografada(s).
A ideia como eu li neste post do DBSE é criar um certificado protegido por senha, um monte de chaves simétricas sob ele, e o cliente deve abrir essas chaves com a senha que só eles conhecem.
Isso parece garantir que, de fato, ninguém além do cliente possa ler os dados criptografados. No entanto, eles ainda podem modificá-los (excluí-los ou atualizá-los = corrompê-los). Pelo que entendi, using ENC/DECRYPTBYKEY
é apenas uma função escalar, independente de tabelas. Isso significa que se alguém usar essas funções em uma coluna específica não "informará" ao banco de dados que essas colunas contêm dados criptografados. Assim, a única maneira de "proteger" os dados é o privilégio da velha escola.
Eu perdi alguma coisa? Existe uma maneira de restringir uma coluna para aceitar apenas atualizações ou exclusões se uma chave específica estiver aberta? Talvez até, no caso de atualização, exija que o inserted.
valor seja sempre a saída da função EncryptByKey?
Não, um administrador de sistema ou alguém com permissões suficientes pode alterar os dados independentemente da criptografia.
Se a pergunta ou investigação mudar para algo em que não importa se os dados podem ser alterados, mas que foram criptografados ou indisponíveis para um administrador de sistema ou alguém com permissões suficientes, sim, isso é possível, mas exigiria que as chaves fossem armazenadas fora do sistema de banco de dados ou para que senhas secretas sejam conhecidas (menos seguras).