AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 160125
Accepted
Ben Thul
Ben Thul
Asked: 2017-01-06 15:10:43 +0800 CST2017-01-06 15:10:43 +0800 CST 2017-01-06 15:10:43 +0800 CST

Como verifico se a criptografia da chave mestra do banco de dados é válida?

  • 772

Eu tenho um cenário em que estou restaurando um banco de dados de um servidor para outro. No servidor de origem, a chave mestra do banco de dados (DMK) é criptografada com uma senha e a chave mestra de serviço (SMK). Quando vou restaurá-lo para o novo servidor, a linha sys.key_encryptionsainda diz que está criptografado pelo SMK. Isso não é verdade, já que os SMKs não correspondem entre os dois servidores. Existe alguma maneira programática de verificar se o DMK está realmente criptografado com o SMK deste servidor ?

sql-server encryption
  • 1 1 respostas
  • 23297 Views

1 respostas

  • Voted
  1. Best Answer
    Solomon Rutzky
    2017-01-06T19:06:47+08:002017-01-06T19:06:47+08:00

    Para determinar programaticamente se o SMK atual foi usado para proteger o DMK, você deve ser capaz de simplesmente tentar uma operação que exija o DMK. Essa operação precisaria primeiro descriptografar o DMK para usá-lo. Supondo que você não tenha aberto o DMK explicitamente (usando a senha fornecida ao criá-lo), descriptografar o DMK exigirá o SMK. Se o SMK atual não for o SMK correto , o DMK não será descriptografado automaticamente e a operação falhará. Então:

    • Se você possui um Certificado que existe com certeza no Banco de Dados que está sendo restaurado, tente usá-lo:

      SELECT SIGNBYCERT( CERT_ID( '{certificate_name}' ), 'test' );
      

      Isso deve retornar um NULLvalor não VARBINARY. Se o valor de retorno for NULL, o DMK precisará ser regenerado (conforme as instruções abaixo).

    • Se nenhum certificado existir com certeza no banco de dados que está sendo restaurado, tente criar um. Se o SMK puder ser usado para descriptografar automaticamente o DMK, o certificado será criado; caso contrário, a operação falhará:

      BEGIN TRY
        CREATE CERTIFICATE [TestCert] WITH SUBJECT = 'yadda yadda yadda';
        DROP CERTIFICATE [TestCert];
        PRINT 'All good, yo!';
      END TRY
      BEGIN CATCH
        PRINT ERROR_MESSAGE();
      END CATCH;
      

    No entanto, como você acabou de restaurar um banco de dados proveniente de outra instância e não restaurou o SMK dessa outra instância na nova instância, é seguro assumir que a resposta é: "não, o DMK não está criptografado com o SMK deste servidor".

    Este é um cenário esperado que requer as seguintes etapas para remediar:

    USE [newly_restored_db];
    OPEN MASTER KEY DECRYPTION BY PASSWORD = '{password}'; -- password used to protect DMK
    ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = '{password}';
    CLOSE MASTER KEY;
    

    A página do MSDN para CREATE MASTER KEYestados (ênfase adicionada):

    Para SQL Server e Parallel Data Warehouse, a chave mestra normalmente é protegida pela chave mestra de serviço e pelo menos uma senha. Caso o banco de dados seja movido fisicamente para um servidor diferente (envio de log, restauração de backup, etc.), o banco de dados conterá uma cópia da chave mestra criptografada pela chave mestra de serviço do servidor original (a menos que essa criptografia tenha sido explicitamente removida usando ALTER MASTER KEY DDL) e uma cópia criptografada por cada senha especificada durante as operações CREATE MASTER KEY ou ALTER MASTER KEY DDL subsequentes. Para recuperar a chave mestra e todos os dados criptografados usando a chave mestra como raiz na hierarquia de chaves após a movimentação do banco de dados, o usuário terá [para] usar [a] instrução OPEN MASTER KEY usando um dos a(s) senha(s) usada(s) para proteger a Chave Mestra, restaure um backup da Chave Mestra ou restaure um backup da Chave Mestra de Serviço original no novo servidor.

    A página do MSDN para OPEN MASTER KEYos estados:

    Quando um banco de dados é anexado ou restaurado pela primeira vez a uma nova instância do SQL Server, uma cópia da chave mestra do banco de dados (criptografada pela chave mestra do serviço) ainda não é armazenada no servidor. Você deve usar a instrução OPEN MASTER KEY para descriptografar a chave mestra do banco de dados (DMK). Depois que o DMK for descriptografado, você terá a opção de ativar a descriptografia automática no futuro usando a instrução ALTER MASTER KEY REGENERATE para fornecer ao servidor uma cópia do DMK, criptografada com a chave mestra de serviço (SMK). Quando um banco de dados foi atualizado de uma versão anterior, o DMK deve ser regenerado para usar o algoritmo AES mais recente. Para obter mais informações sobre como regenerar o DMK, consulte ALTER MASTER KEY (Transact-SQL). O tempo necessário para regenerar a chave DMK para atualizar para AES depende do número de objetos protegidos pela DMK. Gerar novamente a chave DMK para atualizar para AES é necessário apenas uma vez e não tem impacto em regenerações futuras como parte de uma estratégia de rotação de chaves.

    A página do MSDN para ALTER MASTER KEY afirma:

    A opção REGENERATE recria a chave mestra do banco de dados e todas as chaves que ela protege. As chaves são primeiro descriptografadas com a chave mestra antiga e depois criptografadas com a nova chave mestra. Essa operação de uso intensivo de recursos deve ser agendada durante um período de baixa demanda, a menos que a chave mestra tenha sido comprometida.

    • 8

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve