Partage via


sp_control_dbmasterkey_password (Transact-SQL)

S’applique à : SQL Server Azure SQL Managed Instance

Ajoute ou supprime des informations d’identification contenant le mot de passe nécessaire pour ouvrir une clé principale de base de données (DMK).

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

@db_name= N’db_name'

Spécifie le nom de la base de données associée à ces informations d'identification. Il ne peut pas s’agir d’une base de données système. @db_name est nvarchar.

@password= N’password'

Spécifie le mot de passe du DMK. @password est nvarchar.

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

Spécifie une action pour une information d’identification pour la base de données spécifiée dans le magasin d’informations d’identification. La valeur passée à @action est nvarchar.

Action Description
add Indique que des informations d'identification seront ajoutées dans la banque d'informations d'identification pour la base de données spécifiée. Les informations d’identification contiennent le mot de passe du DMK.
drop Indique que des informations d'identification seront supprimées de la banque d'informations d'identification pour la base de données spécifiée.

Notes

Quand SQL Server a besoin d’un DMK pour déchiffrer ou chiffrer une clé, SQL Server tente de déchiffrer le DMK avec la clé principale du service (SMK) de l’instance. Si le déchiffrement échoue, SQL Server recherche dans le magasin d’informations d’identification les informations d’identification qui ont le même GUID de famille que la base de données pour laquelle elle a besoin de la clé. SQL Server tente ensuite de déchiffrer le DMK avec chaque informations d’identification correspondantes jusqu’à ce que le déchiffrement réussisse ou qu’il n’y ait plus d’informations d’identification.

Attention

Ne créez pas d’informations d’identification de clé principale pour une base de données qui doit être inaccessible à et à sa d’autres principaux de serveur hautement privilégiés. Vous pouvez configurer une base de données afin que sa hiérarchie de clés ne puisse pas être déchiffrée par le SMK. Cette option est prise en charge en tant que défense approfondie pour les bases de données qui contiennent des informations chiffrées qui ne doivent pas être accessibles ou sa d’autres principaux de serveur hautement privilégiés. La création d’informations d’identification pour une telle base de données supprime cette défense en profondeur, ce qui permet sa et d’autres principaux de serveur hautement privilégiés de déchiffrer la base de données.

Les informations d’identification créées à l’aide sp_control_dbmasterkey_password sont visibles dans l’affichage catalogue sys.master_key_passwords. Les noms des informations d’identification créées pour les kits de gestion des clés de gestion dynamique ont le format suivant : ##DBMKEY_<database_family_guid>_<random_password_guid>##. Le mot de passe est stocké en tant que secret des informations d'identification. Chaque mot de passe ajouté au magasin d’informations d’identification comporte une ligne correspondante dans sys.credentials.

Vous ne pouvez pas utiliser sp_control_dbmasterkey_password pour créer des informations d’identification pour les bases de données système suivantes : master, , modelmsdbou tempdb.

sp_control_dbmasterkey_password ne vérifie pas que le mot de passe peut ouvrir le DMK de la base de données spécifiée.

Si vous spécifiez un mot de passe déjà stocké dans des informations d’identification pour la base de données spécifiée, sp_control_dbmasterkey_password échoue.

Deux bases de données issues d'instances de serveur différentes peuvent partager le même GUID de famille. Si cela se produit, les bases de données partagent les mêmes enregistrements DMK dans le magasin d’informations d’identification.

Les paramètres passés à sp_control_dbmasterkey_password ne s’affichent pas dans les traces.

Lorsque vous utilisez les informations d’identification ajoutées à l’aide sp_control_dbmasterkey_password de la DMK pour ouvrir le DMK, le DMK est rechiffré par le SMK. Si la base de données est en mode lecture seule, l’opération de rechiffrage échoue et le DMK reste non chiffré. Pour accéder ultérieurement au DMK, vous devez utiliser l’instruction OPEN MASTER KEY et un mot de passe. Pour ne pas à avoir à utiliser un mot de passe, créez les informations d'identification avant de placer la base de données en mode lecture seule.

Problème potentiel de compatibilité descendante

Actuellement, la procédure stockée ne vérifie pas si une clé existe. Cette fonctionnalité est autorisée pour la compatibilité descendante, mais affiche un avertissement. Ce comportement est déconseillé. Dans une version ultérieure, la clé doit exister et le mot de passe utilisé dans la procédure sp_control_dbmasterkey_password stockée doit être le même mot de passe que l’un des mots de passe utilisés pour chiffrer le DMK.

autorisations

Nécessite l’appartenance au rôle serveur fixe sysadmin ou exécutez l’autorisation directement sur cette procédure stockée.

Exemples

Les exemples de code Transact-SQL de cet article sont fondés sur l’échantillon de base de données AdventureWorks2022 ou AdventureWorksDW2022 fourni, que vous pouvez télécharger à partir de la page d’accueil Échantillons et projets communautaires Microsoft SQL Server.

A. Créer des informations d’identification pour la clé principale AdventureWorks

L’exemple suivant crée des informations d’identification pour le AdventureWorks2022 DMK et enregistre le mot de passe de clé principale en tant que secret dans les informations d’identification. Étant donné que tous les paramètres passés sp_control_dbmasterkey_password doivent être de type de données nvarchar, les chaînes de texte sont converties avec l’opérateur Nde cast.

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

B. Supprimer des informations d’identification pour une clé principale de base de données

L’exemple suivant supprime les informations d’identification créées dans l’exemple A. Tous les paramètres sont requis, y compris le mot de passe.

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