Existe uma maneira rápida de localizar todas as colunas no SQL Server 2008 R2 que são criptografadas/têm dados criptografados?
Preciso anular os dados em todas as colunas criptografadas em um servidor de desenvolvimento (de acordo com nossas regras de negócios). Conheço a maioria das colunas porque as usamos regularmente, mas quero ser minucioso e também quero poder provar que encontrei todas elas.
Pesquisei na web, procurei em INFORMATION_SCHEMA e verifiquei os DMVs que pensei que seriam úteis e também sys.columns e sys.objects - mas até agora sem sorte.
Supondo que você esteja falando sobre dados criptografados com chaves do SQL Server, existe uma maneira de encontrar essas colunas.
A
Key_name()
função retornará o nome da chave usada para a criptografia para esse valor específico e retornará NULL se não houver nada criptografado com uma chave "conhecida" (de terceiros ou simples não criptografada).Com esse conhecimento podemos testar cada coluna para ver se contém pelo menos uma linha que tenha um valor varbinary que retorne um nome de chave
funcionalidade de key_name()
resultados:
resultados:
Como implementá-lo para encontrar colunas criptografadas
resultados:
O problema com a criptografia no nível da célula é que a coluna em si não é realmente criptografada, são os dados contidos nessa coluna. As próprias colunas são apenas colunas varbinárias (porque é isso que é necessário) e podem conter dados completamente legíveis. É o uso das funções
ENCRYPTBY*
eDECRYPTBY*
que realmente tornam os dados criptografados.Você pode começar simplesmente consultando a exibição sys.columns para todas as colunas que são varbinárias:
Caso contrário, você precisará revisar seu código para identificar onde as funções de criptografia/descriptografia estão sendo usadas:
Execute a consulta abaixo em um banco de dados específico
Ligeiramente alterado de
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ca9d8360-5d7e-4de1-abe6-ce1afda595a9/how-to-find-which-table-columns-are-encrypted?forum=sqlsecurity
Você pode localizar as colunas criptografadas com keys\certificates pesquisando todas as colunas varbinary e verificando uma chave de criptografia com a função KEY_NAME.
No entanto, este processo é um pouco caro e demorado. Se você precisar localizar essas colunas regularmente, sugiro "marcar" as colunas com propriedades estendidas. Podemos desenvolver a solução de Edward Dortland e "marcar" as colunas encontradas com propriedades estendidas como criptografado, encryptkey e encryptcert.
Em seguida, podemos encontrar facilmente as colunas criptografadas pesquisando as propriedades estendidas.