sp_control_dbmasterkey_password (Transact-SQL)

Si applica a:Istanza gestita di SQL Di Azure di SQL Server

Aggiunge o rimuove una credenziale contenente la password necessaria per aprire una chiave master del database.

Convenzioni di sintassi Transact-SQL

Sintassi

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

Argomenti

@db_name=N'database_name'
Specifica il nome del database associato alla credenziale. Non è possibile specificare un database di sistema. database_name è nvarchar.

@password=N'password'
Specifica la password della chiave master. password è nvarchar.

@action=N'add'
Specifica che una credenziale per il database specificato verrà aggiunta all'archivio delle credenziali. La credenziale conterrà la password della chiave master del database. Il valore passato a @action è nvarchar.

@action=N'drop'
Specifica che una credenziale per il database specificato verrà rimossa dall'archivio delle credenziali. Il valore passato a @action è nvarchar.

Osservazioni:

Quando SQL Server richiede una chiave master del database per decrittografare o crittografare una chiave, SQL Server tenta di decrittografare la chiave master del database con la chiave master del servizio dell'istanza. Se la decrittografia non riesce, SQL Server cerca nell'archivio credenziali le credenziali della chiave master con lo stesso GUID della famiglia del database per cui è necessaria la chiave master. SQL Server tenta quindi di decrittografare la chiave master del database con ogni credenziale corrispondente fino a quando la decrittografia non riesce o non sono presenti altre credenziali.

Attenzione

Non creare una credenziale per la chiave master di un database che non deve essere accessibile per l'account sa e altre entità server con privilegi elevati. È possibile configurare un database in modo che la sua gerarchia di chiavi non possa essere decrittografata dalla chiave master del servizio. Questa opzione è supportata come difesa in profondità per i database contenenti informazioni crittografate che non devono essere accessibili per l'account sa o altre entità server con privilegi elevati. La creazione di una credenziale per la chiave master di un database con queste esigenze annulla questa difesa in profondità, consentendo all'account sa e ad altre entità server con privilegi elevati di decrittografare il database.

Le credenziali create tramite sp_control_dbmasterkey_password sono visibili nella vista del catalogo sys.master_key_passwords . I nomi delle credenziali create per le chiavi master dei database hanno il formato seguente: ##DBMKEY_<database_family_guid>_<random_password_guid>##. La password viene archiviata come segreto della credenziale. Per ogni password aggiunta all'archivio delle credenziali esiste una riga in sys.credentials.

Non è possibile utilizzare sp_control_dbmasterkey_password per creare una credenziale per i database di sistema seguenti: master, model, msdb o tempdb.

sp_control_dbmasterkey_password non verifica che la password consenta effettivamente di aprire la chiave master del database specificato.

Se si specifica una password già archiviata in una credenziale per il database specificato, l'esecuzione di sp_control_dbmasterkey_password avrà esito negativo.

Nota

Due database disponibili in istanze diverse del server possono condividere lo stesso GUID. In questo caso, per i database verranno utilizzati gli stessi record di chiave master nell'archivio delle credenziali.

I parametri passati a sp_control_dbmasterkey_password non sono visibili nelle tracce.

Nota

Quando si utilizza la credenziale aggiunta tramite sp_control_dbmasterkey_password per aprire la chiave del database master, quest'ultima viene nuovamente crittografata dalla chiave master del servizio. Se il database si trova in modalità sola lettura, non sarà possibile eseguire nuovamente la crittografia e la chiave master del database rimarrà non crittografata. Per accedere successivamente alla chiave master del database, è necessario utilizzare l'istruzione OPEN MASTER KEY e una password. Per evitare di utilizzare una password, creare le credenziali prima di applicare al database la modalità sola lettura.

Potenziale problema di compatibilità con le versioni precedenti: attualmente la stored procedure non verifica se esiste una chiave master. Questo è consentito solo per la compatibilità con le versioni precedenti, ma viene visualizzato un avviso. Questo comportamento è deprecato. In una versione futura la chiave master deve esistere e la password usata nella stored procedure sp_control_dbmasterkey_password deve essere la stessa password di una delle password usate per crittografare la chiave master del database.

Autorizzazioni

È richiesta l'appartenenza al ruolo predefinito del server sysadmin .

Esempi

R. Creazione di credenziali per la chiave master AdventureWorks

Nell'esempio seguente viene creata una credenziale per la chiave master del database AdventureWorks2022 e la password della chiave master viene salvata come segreto nella credenziale. Poiché tutti i parametri passati a sp_control_dbmasterkey_password devono essere di tipo dati nvarchar, le stringhe di testo vengono convertite con l'operatore Ndi cast .

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

B. Rimozione di una credenziale per una chiave master del database

Nell'esempio seguente viene rimossa la credenziale creata nell'esempio A. Si noti che tutti i parametri sono obbligatori, inclusa la password.

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

Vedi anche

Impostazione di un database mirror crittografato
Stored procedure di sicurezza (Transact-SQL)
Stored procedure di sistema (Transact-SQL)
sys.credentials (Transact-SQL)
Credenziali (motore di database)