sp_control_dbmasterkey_password (Transact-SQL)

Gilt für:SQL ServerAzure SQL Managed Instance

Wird zum Hinzufügen oder Löschen von Anmeldeinformationen verwendet, die das zum Öffnen des Datenbank-Hauptschlüssels benötigte Kennwort enthalten.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

@db_name=N"database_name"
Gibt den Namen der Datenbank an, die diesen Anmeldeinformationen zugeordnet ist. Es darf sich nicht um eine Systemdatenbank handeln. database_name ist nvarchar.

@password=N"Kennwort"
Gibt das Kennwort des Hauptschlüssels an. password is nvarchar.

@action=N"hinzufügen"
Gibt an, dass dem Anmeldeinformationenspeicher Anmeldeinformationen für die angegebene Datenbank hinzugefügt werden. In den Anmeldeinformationen ist das Kennwort für den Datenbank-Hauptschlüssel enthalten. Der an den Wert übergebene @action Wert ist nvarchar.

@action=N"drop"
Gibt an, dass Anmeldeinformationen für die angegebene Datenbank aus dem Anmeldeinformationenspeicher gelöscht werden. Der an den Wert übergebene @action Wert ist nvarchar.

Hinweise

Wenn SQL Server einen Datenbankmasterschlüssel zum Entschlüsseln oder Verschlüsseln eines Schlüssels benötigt, versucht SQL Server, den Datenbankmasterschlüssel mit dem Dienstmasterschlüssel der Instanz zu entschlüsseln. Wenn die Entschlüsselung fehlschlägt, durchsucht SQL Server den Anmeldeinformationsspeicher nach Masterschlüsselanmeldeinformationen, die dieselbe Familien-GUID wie die Datenbank aufweisen, für die der Hauptschlüssel benötigt wird. SQL Server versucht dann, den Datenbankmasterschlüssel mit den entsprechenden Anmeldeinformationen zu entschlüsseln, bis die Entschlüsselung erfolgreich ist oder keine weiteren Anmeldeinformationen vorhanden sind.

Achtung

Wenn von sa und anderen Serverprinzipalen mit hohen Privilegien nicht auf eine Datenbank zugegriffen werden soll, ist das Erstellen von Hauptschlüssel-Anmeldeinformationen nicht empfehlenswert. Sie können eine Datenbank so konfigurieren, dass ihre Schlüsselhierarchie nicht vom Diensthauptschlüssel entschlüsselt werden kann. Diese Option wird als sicherer Schutz für Datenbanken mit verschlüsselten Informationen unterstützt, auf die von sa oder anderen Serverprinzipalen mit hohen Privilegien nicht zugegriffen werden soll. Durch das Erstellen eines Hauptschlüssels für eine Datenbank dieser Art wird der sichere Schutz entfernt, sodass sa und andere Serverprinzipale mit hohen Privilegien die Datenbank entschlüsseln können.

Anmeldeinformationen, die mithilfe von sp_control_dbmasterkey_password erstellt werden, sind in der sys.master_key_passwords Katalogansicht sichtbar. Die Namen der für Datenbank-Hauptschlüssel erstellten Anmeldeinformationen besitzen das folgende Format: ##DBMKEY_<database_family_guid>_<random_password_guid>##. Das Kennwort wird als Anmeldeinformation-Kennwort gespeichert. Für jedes dem Anmeldeinformationenspeicher hinzugefügte Kennwort ist eine Zeile in sys.credentials vorhanden.

sp_control_dbmasterkey_password kann nicht verwendet werden, um Anmeldeinformationen für die folgenden Systemdatenbanken zu erstellen: master, model, msdb oder tempdb.

sp_control_dbmasterkey_password überprüft nicht, ob der Hauptschlüssel der angegebenen Datenbank mit dem Kennwort geöffnet werden kann.

Falls Sie ein Kennwort angeben, das bereits in Anmeldeinformationen für die angegebene Datenbank gespeichert ist, erzeugt sp_control_dbmasterkey_password einen Fehler.

Hinweis

Zwei Datenbanken aus unterschiedlichen Serverinstanzen können denselben Familien-GUID verwenden. In diesem Fall verwenden die Datenbanken dieselben Hauptschlüssel-Datensätze im Anmeldeinformationenspeicher.

Die an sp_control_dbmasterkey_password übergebenen Parameter werden in Ablaufverfolgungen nicht angezeigt.

Hinweis

Wenn Sie zum Öffnen des Datenbank-Hauptschlüssels die Anmeldeinformationen verwenden, die mit sp_control_dbmasterkey_password hinzugefügt wurden, wird der Datenbank-Hauptschlüssel mit dem Diensthauptschlüssel neu verschlüsselt. Wenn sich die Datenbank im schreibgeschützten Modus befindet, schlägt die Neuverschlüsselung fehl, und der Datenbank-Hauptschlüssel bleibt unverschlüsselt. Für den anschließenden Zugriff auf den Datenbank-Hauptschlüssel müssen Sie die OPEN MASTER KEY-Anweisung und ein Kennwort verwenden. Sie können die Verwendung eines Kennworts vermeiden, wenn Sie die Anmeldeinformationen erstellen, bevor Sie die Datenbank in den schreibgeschützten Modus versetzen.

Potenzielles Abwärtskompatibilitätsproblem: Derzeit überprüft die gespeicherte Prozedur nicht, ob ein Hauptschlüssel vorhanden ist. Dies wird aus Gründen der Abwärtskompatibilität zugelassen, es wird jedoch eine Warnung angezeigt. Dieses Verhalten ist als veraltet markiert. In einer zukünftigen Freigabe muss der Hauptschlüssel vorhanden sein, und das kennwort, das in der gespeicherten Prozedur verwendet wird, sp_control_dbmasterkey_password muss dasselbe Kennwort wie eines der Kennwörter sein, die zum Verschlüsseln des Datenbankmasterschlüssels verwendet werden.

Berechtigungen

Erfordert die Mitgliedschaft in der festen Serverrolle sysadmin .

Beispiele

A. Erstellen einer Anmeldeinformation für den AdventureWorks-Hauptschlüssel

Im folgenden Beispiel werden Anmeldeinformationen für den Hauptschlüssel der AdventureWorks2022-Datenbank erstellt, und das Kennwort für den Hauptschlüssel wird als geheimer Eintrag in den Anmeldeinformationen gespeichert. Da alle Parameter, an sp_control_dbmasterkey_password die übergeben werden, vom Datentyp nvarchar sein müssen, werden die Textzeichenfolgen mit dem Umwandlungsoperator Nkonvertiert.

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

B. Löschen von Anmeldeinformationen für einen Datenbank-Hauptschlüssel

Im folgenden Beispiel werden die in Beispiel A erstellten Anmeldeinformationen entfernt. Beachten Sie, dass alle Parameter, einschließlich des Kennworts, erforderlich sind.

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

Weitere Informationen

Einrichten einer verschlüsselten Spiegeldatenbank
Gespeicherte Sicherheitsprozeduren (Transact-SQL)
Gespeicherte Systemprozeduren (Transact-SQL)
sys.credentials (Transact-SQL)
Anmeldeinformationen (Datenbank-Engine)