Freigeben über


sp_control_dbmasterkey_password (Transact-SQL)

Gilt für: SQL Server Azure SQL Managed Instance

Fügt eine Anmeldeinformation hinzu oder legt sie ab, die das Kennwort enthält, das zum Öffnen eines Datenbankmasterschlüssels (DMK) erforderlich ist.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

@db_name= N'db_name'

Gibt den Namen der Datenbank an, die diesen Anmeldeinformationen zugeordnet ist. Es kann sich nicht um eine Systemdatenbank handeln. @db_name ist nvarchar.

@password= N'password'

Gibt das Kennwort des DMK an. @password ist nvarchar.

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

Gibt eine Aktion für anmeldeinformationen für die angegebene Datenbank im Anmeldeinformationsspeicher an. Der an @action übergebene Wert ist nvarchar.

Aktion Beschreibung
add Gibt an, dass dem Anmeldeinformationenspeicher Anmeldeinformationen für die angegebene Datenbank hinzugefügt werden. Die Anmeldeinformationen enthalten das Kennwort des DMK.
drop Gibt an, dass Anmeldeinformationen für die angegebene Datenbank aus dem Anmeldeinformationenspeicher gelöscht werden.

Hinweise

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

Achtung

Erstellen Sie keine Hauptschlüsselanmeldeinformationen für eine Datenbank, auf sa die und andere Serverprinzipale mit hoher Berechtigung nicht zugegriffen werden muss. Sie können eine Datenbank so konfigurieren, dass ihre Schlüsselhierarchie nicht vom SMK entschlüsselt werden kann. Diese Option wird als Verteidigungstiefe für Datenbanken unterstützt, die verschlüsselte Informationen enthalten, auf die nicht zugegriffen sa werden kann, oder für andere Serverprinzipale mit hoher Berechtigungen. Durch das Erstellen einer Anmeldeinformationen für eine solche Datenbank wird diese Verteidigungstiefe entfernt, sodass sa andere Serverprinzipale mit hoher Berechtigung die Datenbank entschlüsseln können.

Anmeldeinformationen, die mithilfe der Verwendung sp_control_dbmasterkey_password erstellt werden, sind in der sys.master_key_passwords Katalogansicht sichtbar. Die Namen der Anmeldeinformationen, die für DMKs erstellt werden, weisen das folgende Format auf: ##DBMKEY_<database_family_guid>_<random_password_guid>## Das Kennwort wird als Anmeldeinformation-Kennwort gespeichert. Jedes Kennwort, das dem Anmeldeinformationsspeicher hinzugefügt wurde, verfügt über eine übereinstimmende Zeile in sys.credentials.

Sie können keine sp_control_dbmasterkey_password Anmeldeinformationen für die folgenden Systemdatenbanken erstellen: master, , , model, msdboder tempdb.

sp_control_dbmasterkey_password überprüft nicht, ob das Kennwort die DMK der angegebenen Datenbank öffnen kann.

Wenn Sie ein Kennwort angeben, das bereits in einer Anmeldeinformation für die angegebene Datenbank gespeichert ist, sp_control_dbmasterkey_password schlägt ein Fehler fehl.

Zwei Datenbanken aus unterschiedlichen Serverinstanzen können denselben Familien-GUID verwenden. In diesem Fall verwenden die Datenbanken dieselben DMK-Einträge im Anmeldeinformationsspeicher.

Parameter, die übergeben werden, werden sp_control_dbmasterkey_password nicht in Ablaufverfolgungen angezeigt.

Wenn Sie die Anmeldeinformationen verwenden, die zum sp_control_dbmasterkey_password Öffnen des DMK hinzugefügt wurden, wird das DMK von SMK erneut verschlüsselt. Wenn sich die Datenbank im schreibgeschützten Modus befindet, schlägt die erneute Verschlüsselung fehl, und die DMK bleibt unverschlüsselt. Für den nachfolgenden Zugriff auf das DMK 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 Problem bei der Abwärtskompatibilität

Derzeit überprüft die gespeicherte Prozedur nicht, ob ein Schlüssel vorhanden ist. Diese Funktionalität ist aus Gründen der Abwärtskompatibilität zulässig, zeigt jedoch eine Warnung an. Dieses Verhalten ist als veraltet markiert. In einer zukünftigen Version muss der Schlüssel vorhanden sein, und das kennwort, das in der gespeicherten Prozedur sp_control_dbmasterkey_password verwendet wird, muss dasselbe Kennwort wie eines der Kennwörter sein, die zum Verschlüsseln des DMK verwendet werden.

Berechtigungen

Erfordert die Mitgliedschaft in der festen Serverrolle "sysadmin ", oder führen Sie die Berechtigung direkt für diese gespeicherte Prozedur aus.

Beispiele

Die Transact-SQL-Codebeispiele in diesem Artikel verwenden die AdventureWorks2022- oder AdventureWorksDW2022-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.

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

Im folgenden Beispiel wird eine Anmeldeinformation für das AdventureWorks2022 DMK erstellt und das Hauptschlüsselkennwort als geheimer Schlüssel 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. Ablegen einer Anmeldeinformation für einen Datenbankmasterschlüssel

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

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