Estou usando o seguinte código do PowerShell para criar um certificado que pode ser usado como chave mestra de coluna para o recurso Always Encrypted:
New-SelfSignedCertificate -Subject "AlwaysEncryptedSecurityLevelNormalV001" -CertStoreLocation Cert:LocalMachineMy -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048 -NotAfter (Get-Date).AddYears(100)
Em seguida, exporto o certificado e importo para a máquina em que o SQL Server está sendo executado. Durante a exportação estou desabilitando a opção de exportar a chave privada do certificado. Portanto, se alguém tentar exportá-lo, obterá o seguinte:
Isso é bom porque a chave privada do certificado é protegida para exportação.
Gostaria de saber se há algum caso em que eu possa precisar exportar apenas o certificado sem a chave privet no contexto do recurso Always Encrypted (como o trabalho deste certificado para proteger apenas as chaves de criptografia da coluna)?
Isso anula a finalidade de usar o Always Encrypted se o servidor que estiver executando o SQL Server também tiver o certificado para descriptografar todos os dados.
Por favor, por favor, por favor, não faça isso! Coloque-o na máquina cliente ou em uma máquina de "ferramentas" ou "carregamento intermediário" para obter e retirar os dados. Em seguida, remova a chave e mantenha-a apenas nas máquinas clientes que estão bloqueadas.
Eu também manteria, no fundo de sua mente, uma solução para quando uma máquina cliente é perdida/roubada/violada (laptop), ou um servidor é comprometido. Como você descobre, quanto tempo você tem para fazer a rotação de CMKs, você sabe como fazer a rotação de CMKs, etc.
A chave privada é o que mantém tudo seguro, então não há chave privada, então não há descriptografia. Não consigo pensar em nenhum momento em que isso seria útil.