Condividi tramite


sp_control_dbmasterkey_password (Transact-SQL)

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

Icona di collegamento a un argomentoConvenzioni della 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 è di tipo nvarchar.

  • @password = N'password'
    Specifica la password della chiave master. password è di tipo 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 è di tipo nvarchar.

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

Osservazioni

Quando SQL Server deve utilizzare una chiave master del database per decrittografare o crittografare una chiave, SQL Server esegue un tentativo di decrittografia della chiave master del database con la chiave master del servizio dell'istanza. Se il tentativo non riesce, SQL Server esegue una ricerca nell'archivio delle credenziali per individuare le credenziali di chiave master con lo stesso GUID 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 non riesce a completare l'operazione o non sono disponibili altre credenziali da provare.

Nota di attenzioneAttenzione

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 gerarchia di chiavi corrispondente non possa essere decrittografata con la 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 con 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 parte segreta 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.

Autorizzazioni

È richiesta l'autorizzazione CONTROL per il database.

Esempi

A. Creazione di una credenziale per la chiave master di AdventureWorks2008R2

Nell'esempio seguente viene creata una credenziale per la chiave master del database AdventureWorks2008R2 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 nvarchar, le stringhe di testo vengono convertite con l'operatore di cast N.

EXEC sp_control_dbmasterkey_password @db_name = N'AdventureWorks2008R2', 
    @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'AdventureWorks2008R2', 
    @password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4', @action = N'drop';
GO