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
, msdb
oder 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 N
konvertiert.
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