sp_control_dbmasterkey_password (Transact-SQL)

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

Aggiunge o elimina una credenziale contenente la password necessaria per aprire una chiave master del database (DMK).

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

@db_name= N'db_name'

Specifica il nome del database associato alla credenziale. Non può essere un database di sistema. @db_name è nvarchar.

@password= N'password'

Specifica la password della DMK. @password è nvarchar.

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

Specifica un'azione per le credenziali per il database specificato nell'archivio credenziali. Il valore passato a @action è nvarchar.

Azione Descrizione
add Specifica che una credenziale per il database specificato verrà aggiunta all'archivio delle credenziali. La credenziale contiene la password di DMK.
drop Specifica che una credenziale per il database specificato verrà rimossa dall'archivio delle credenziali.

Osservazioni:

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

Attenzione

Non creare credenziali della chiave master per un database che non devono essere accessibili a sa e altre entità server con privilegi elevati. È possibile configurare un database in modo che la gerarchia delle chiavi non possa essere decrittografata dalla chiave SMK. Questa opzione è supportata come difesa avanzata per i database che contengono informazioni crittografate che non devono essere accessibili a sa o ad altre entità server con privilegi elevati. La creazione di credenziali per un database di questo tipo rimuove questa difesa approfondita, abilitando sa e altre entità server con privilegi elevati per 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 DMK hanno il formato seguente: ##DBMKEY_<database_family_guid>_<random_password_guid>##. La password viene archiviata come segreto della credenziale. Ogni password aggiunta all'archivio credenziali ha una riga corrispondente in sys.credentials.

Non è possibile usare sp_control_dbmasterkey_password per creare credenziali per i database di sistema seguenti: master, model, msdbo tempdb.

sp_control_dbmasterkey_password non verifica che la password possa aprire la DMK del database specificato.

Se si specifica una password già archiviata in credenziali per il database specificato, sp_control_dbmasterkey_password ha esito negativo.

Due database disponibili in istanze diverse del server possono condividere lo stesso GUID. In questo caso, i database condividono gli stessi record DMK nell'archivio credenziali.

I parametri passati a sp_control_dbmasterkey_password non vengono visualizzati nelle tracce.

Quando si usano le credenziali aggiunte usando sp_control_dbmasterkey_password per aprire DMK, la DMK viene ricrittografata dalla chiave SMK. Se il database è in modalità di sola lettura, l'operazione di ricrittografazione ha esito negativo e DMK rimane non crittografato. Per l'accesso successivo a DMK, è necessario usare 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. Questa funzionalità è consentita per la compatibilità con le versioni precedenti, ma visualizza un avviso. Questo comportamento è deprecato. In una versione futura, la chiave 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 DMK.

Autorizzazioni

Richiede l'appartenenza al ruolo predefinito del server sysadmin o l'autorizzazione di esecuzione direttamente in questa stored procedure.

Esempi

Gli esempi di codice Transact-SQL in questo articolo utilizzano il database campione AdventureWorks2022 o AdventureWorksDW2022, che è possibile scaricare dalla home page di Esempi di Microsoft SQL Server e progetti collettivi.

R. Creare credenziali per la chiave master AdventureWorks

L'esempio seguente crea una credenziale per DMK AdventureWorks2022 e salva la password della chiave master come segreto nelle credenziali. 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. Eliminare una credenziale per una chiave master del database

Nell'esempio seguente vengono rimosse le credenziali create nell'esempio A. 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