Compartir a través de


sp_control_dbmasterkey_password (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Agrega o quita una credencial que contiene la contraseña necesaria para abrir una clave maestra de base de datos (DMK).

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

@db_name= N'db_name'

Especifica el nombre de la base de datos asociada a esta credencial. No puede ser una base de datos del sistema. @db_name es nvarchar.

@password= N'password'

Especifica la contraseña de la DMK. @password es nvarchar.

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

Especifica una acción para una credencial para la base de datos especificada en el almacén de credenciales. El valor pasado a @action es nvarchar.

Acción Descripción
add Especifica que se agregará al almacén de credenciales una credencial para la base de datos especificada. La credencial contiene la contraseña de la DMK.
drop Especifica que se quitará del almacén de credenciales una credencial para la base de datos especificada.

Comentarios

Cuando SQL Server necesita una DMK para descifrar o cifrar una clave, SQL Server intenta descifrar la DMK con la clave maestra de servicio (SMK) de la instancia. Si se produce un error en el descifrado, SQL Server busca en el almacén de credenciales las credenciales que tienen el mismo GUID de familia que la base de datos para la que necesita la clave. A continuación, SQL Server intenta descifrar la DMK con cada credencial coincidente hasta que el descifrado se realiza correctamente o no hay más credenciales.

Precaución

No cree una credencial de clave maestra para una base de datos a la que no se pueda acceder sa y otras entidades de seguridad de servidor con privilegios elevados. Puede configurar una base de datos para que el SMK no pueda descifrar su jerarquía de claves. Esta opción se admite como defensa en profundidad para las bases de datos que contienen información cifrada que no debe ser accesible para sa u otras entidades de seguridad de servidor con privilegios elevados. La creación de una credencial para dicha base de datos elimina esta defensa en profundidad, lo que permite sa y otras entidades de seguridad de servidor con privilegios elevados para descifrar la base de datos.

Las credenciales que se crean mediante sp_control_dbmasterkey_password son visibles en la vista de catálogo de sys.master_key_passwords . Los nombres de las credenciales que se crean para DMK tienen el siguiente formato: ##DBMKEY_<database_family_guid>_<random_password_guid>##. La contraseña se almacena como el secreto de la credencial. Cada contraseña agregada al almacén de credenciales tiene una fila coincidente en sys.credentials.

No se puede usar sp_control_dbmasterkey_password para crear una credencial para las siguientes bases de datos del sistema: master, model, msdbo tempdb.

sp_control_dbmasterkey_password no comprueba que la contraseña pueda abrir la DMK de la base de datos especificada.

Si especifica una contraseña que ya está almacenada en una credencial para la base de datos especificada, sp_control_dbmasterkey_password se produce un error.

Dos bases de datos de diferentes instancias de servidor pueden compartir el mismo GUID de familia. Si esto ocurre, las bases de datos comparten los mismos registros DMK en el almacén de credenciales.

Los parámetros pasados para sp_control_dbmasterkey_password no aparecen en seguimientos.

Cuando se usa la credencial que se agregó mediante sp_control_dbmasterkey_password para abrir la DMK, la DMK se vuelve a cifrar mediante SMK. Si la base de datos está en modo de solo lectura, se produce un error en la operación de reescrito y la DMK permanece sin cifrar. Para el acceso posterior a la DMK, debe usar la OPEN MASTER KEY instrucción y una contraseña. Para evitar el uso de una contraseña, cree la credencial antes de pasar la base de datos al modo de solo lectura.

Posible problema de compatibilidad con versiones anteriores

Actualmente, el procedimiento almacenado no comprueba si existe una clave. Esta funcionalidad se permite para la compatibilidad con versiones anteriores, pero muestra una advertencia. Este comportamiento se ha desaprobado. En una versión futura, la clave debe existir y la contraseña usada en el procedimiento sp_control_dbmasterkey_password almacenado debe ser la misma que una de las contraseñas usadas para cifrar la DMK.

Permisos

Requiere la pertenencia al rol fijo de servidor sysadmin o ejecutar el permiso directamente en este procedimiento almacenado.

Ejemplos

Los ejemplos de código de Transact-SQL de este artículo utilizan la base de datos de ejemplo AdventureWorks2022 o AdventureWorksDW2022, que se pueden descargar desde la página principal de Ejemplos y proyectos de la comunidad de Microsoft SQL Server.

A Creación de una credencial para la clave maestra AdventureWorks

En el ejemplo siguiente se crea una credencial para la AdventureWorks2022 DMK y se guarda la contraseña de clave maestra como secreto en la credencial. Dado que todos los parámetros que se pasan a sp_control_dbmasterkey_password deben ser del tipo de datos nvarchar, las cadenas de texto se convierten con el operador Nde conversión .

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

B. Quitar una credencial de una clave maestra de base de datos

En el ejemplo siguiente se quita la credencial creada en el ejemplo A. Se requieren todos los parámetros, incluida la contraseña.

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