Share via


sp_control_dbmasterkey_password (Transact-SQL)

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

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

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

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

@password=N'senha'
Especifica a senha da chave mestra. A senha é nvarchar.

@action=N'adicionar'
Especifica que uma credencial para o banco de dados especificado será adicionada ao repositório de credenciais. A credencial conterá a senha da chave mestra do banco de dados. O valor passado para @action é nvarchar.

@action=N'Queda'
Especifica que uma credencial para o banco de dados especificado será descartada do repositório de credenciais. O valor passado para @action é nvarchar.

Comentários

Quando o SQL Server precisa de uma chave mestra de banco de dados para descriptografar ou criptografar uma chave, o SQL Server tenta descriptografar a chave mestra de banco de dados com a chave mestra de serviço da instância. Se a descriptografia falhar, o SQL Server procurará no repositório de credenciais credenciais que tenham o mesmo GUID da família que o banco de dados para o qual ele precisa da chave mestra. Em seguida, o SQL Server tenta descriptografar a chave mestra do banco de dados 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 e outras entidades de servidor altamente privilegiadas. É possível configurar um banco de dados de forma que sua hierarquia fundamental não possa ser descriptografada pela chave mestra de serviço. Essa opção é suportada como uma defesa profunda para bancos de dados que contêm informações criptografadas que não devem ser acessíveis a sa ou outras entidades de servidor altamente privilegiadas. A criação de uma credencial de chave mestra para esse banco de dados remove essa defesa em profundidade, permitindo que sa e outras entidades de servidor altamente privilegiadas descriptografem o banco de dados.

As credenciais criadas usando sp_control_dbmasterkey_password ficam visíveis no modo de exibição de catálogo sys.master_key_passwords. Os nomes de credenciais criados para chaves mestras de banco de dados têm o seguinte formato: ##DBMKEY_<database_family_guid>_<random_password_guid>##. A senha é armazenada como o segredo da credencial. Para cada senha adicionada ao repositório de credenciais, há uma linha em sys.credentials.

Não é possível 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 a chave mestra 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 falhará.

Observação

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

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

Observação

Quando você estiver usando a credencial que foi adicionada usando sp_control_dbmasterkey_password para abrir a chave mestra do banco de dados, a chave mestra do banco de dados será criptografada novamente pela chave mestra de serviço. Se o banco de dados estiver no modo somente leitura, a operação de recriptografia falhará e a chave mestra do banco de dados permanecerá não criptografada. Para acesso subsequente à chave mestra do banco de dados, você deve usar a instrução OPEN MASTER KEY 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 mestra. Isso é permitido para compatibilidade com versões anteriores, mas exibe um aviso. Este comportamento é preterido. Em uma versão futura, a chave mestra deve existir e a senha usada no procedimento armazenado sp_control_dbmasterkey_password deve ser a mesma senha que uma das senhas usadas para criptografar a chave mestra do banco de dados.

Permissões

Exige associação à função de servidor fixa sysadmin .

Exemplos

R. Criando uma credencial para a chave mestra do AdventureWorks

O exemplo a seguir cria uma credencial para a chave mestra do banco de dados e salva a AdventureWorks2022 senha da chave mestra como o segredo na credencial. Como todos os parâmetros que são passados para sp_control_dbmasterkey_password devem ser do tipo de dados nvarchar, as cadeias 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. Descartando uma credencial para uma chave mestra de banco de dados

O exemplo a seguir remove a credencial criada no exemplo A. Observe que todos os parâmetros são necessários, incluindo a senha.

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

Veja também

Configurar um banco de dados espelho criptografado
Procedimentos armazenados de segurança (Transact-SQL)
Procedimentos armazenados do sistema (Transact-SQL)
sys.credentials (Transact-SQL)
Credenciais (Mecanismo de Banco de Dados)