Compartilhar via


sp_control_dbmasterkey_password (Transact-SQL)

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

Adiciona ou descarta uma credencial que contém a senha necessária para abrir uma DMK (chave mestra de banco de dados).

Convenções de sintaxe de Transact-SQL

Sintaxe

sp_control_dbmasterkey_password @db_name = 'db_name'
    , @password = 'password'
    , @action = { N'add' | N'drop' }

Argumentos

@db_name= N'db_name'

Especifica o nome do banco de dados associado a essa credencial. Não pode ser um banco de dados do sistema. @db_name é nvarchar.

@password= N'senha'

Especifica a senha da DMK. @password é nvarchar.

@action = { N'add' | N'drop' }

Especifica uma ação para uma credencial para o banco de dados especificado no repositório de credenciais. O valor passado para @action é nvarchar.

Ação Descrição
add Especifica que uma credencial para o banco de dados especificado será adicionada ao armazenamento de credenciais. A credencial contém a senha do DMK.
drop Especifica que uma credencial para o banco de dados especificado será descartada do armazenamento de credenciais.

Comentários

Quando o SQL Server precisa de um DMK para descriptografar ou criptografar uma chave, o SQL Server tenta descriptografar o DMK com a chave mestra de serviço (SMK) da instância. Se a descriptografia falhar, o SQL Server pesquisará o repositório de credenciais em busca de credenciais que tenham o mesmo GUID de família que o banco de dados para o qual ele precisa da chave. Em seguida, o SQL Server tenta descriptografar o DMK com cada credencial correspondente até que a descriptografia seja bem-sucedida ou não haja mais credenciais.

Cuidado

Não crie uma credencial de chave mestra para um banco de dados que deve ser inacessível para sa outras entidades de servidor altamente privilegiadas. Você pode configurar um banco de dados para que sua hierarquia de chaves não possa ser descriptografada pelo SMK. Essa opção tem suporte como uma defesa em profundidade para bancos de dados que contêm informações criptografadas que não devem ser acessíveis ou sa outras entidades de servidor altamente privilegiadas. A criação de uma credencial para esse banco de dados remove essa defesa em profundidade, permitindo que sa outras entidades de servidor altamente privilegiadas descriptografem o banco de dados.

As credenciais criadas usando sp_control_dbmasterkey_password são visíveis na exibição do catálogo sys.master_key_passwords . Os nomes das credenciais criadas para DMKs têm o seguinte formato: ##DBMKEY_<database_family_guid>_<random_password_guid>##. A senha é armazenada como o segredo de credencial. Cada senha adicionada ao armazenamento de credenciais tem uma linha correspondente em sys.credentials.

Você não pode usar sp_control_dbmasterkey_password para criar uma credencial para os seguintes bancos de dados do sistema: master, model, msdb, ou tempdb.

sp_control_dbmasterkey_password não verifica se a senha pode abrir o DMK do banco de dados especificado.

Se você especificar uma senha que já esteja armazenada em uma credencial para o banco de dados especificado, sp_control_dbmasterkey_password o falha.

Dois bancos de dados de instâncias de servidor diferentes podem compartilhar o mesmo GUID de família. Se isso ocorrer, os bancos de dados compartilharão os mesmos registros DMK no repositório de credenciais.

Os parâmetros passados para sp_control_dbmasterkey_password não aparecem nos rastreamentos.

Quando você está usando a credencial que foi adicionada usando sp_control_dbmasterkey_password para abrir a DMK, a DMK é criptografada novamente pela SMK. Se o banco de dados estiver no modo somente leitura, a operação de nova criptografia falhará e a DMK permanecerá não criptografada. Para acesso subsequente à DMK, você deve usar a OPEN MASTER KEY instrução e uma senha. Para evitar o uso de uma senha, crie a credencial antes de mover o banco de dados para o modo somente leitura.

Possível problema de compatibilidade com versões anteriores

Atualmente, o procedimento armazenado não verifica se existe uma chave. Essa funcionalidade é permitida para compatibilidade com versões anteriores, mas exibe um aviso. Este comportamento é preterido. Em uma versão futura, a chave deve existir e a senha usada no procedimento sp_control_dbmasterkey_password armazenado deve ser a mesma senha que uma das senhas usadas para criptografar a DMK.

Permissões

Requer associação na função de servidor fixa sysadmin ou permissão de execução diretamente nesse procedimento armazenado.

Exemplos

Os exemplos de código do Transact-SQL deste artigo usa o banco de dados de exemplo AdventureWorks2022 ou AdventureWorksDW2022, que pode ser baixado da home page Microsoft SQL Server Samples and Community Projects.

R. Criar uma credencial para a chave mestra do AdventureWorks

O exemplo a seguir cria uma credencial para a AdventureWorks2022 DMK e salva a senha da chave mestra como o segredo na credencial. Como todos os parâmetros passados devem sp_control_dbmasterkey_password ser do tipo de dados nvarchar, as strings de texto são convertidas com o operador Nde conversão .

EXEC sp_control_dbmasterkey_password
    @db_name = N'AdventureWorks2022',
    @password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4',
    @action = N'add';
GO

B. Descartar uma credencial para uma chave mestra de banco de dados

O exemplo a seguir remove a credencial criada no exemplo A. Todos os parâmetros são obrigatórios, incluindo a senha.

EXEC sp_control_dbmasterkey_password
    @db_name = N'AdventureWorks2022',
    @password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4',
    @action = N'drop';
GO