sp_control_dbmasterkey_password (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

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

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

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

@password=N'password'
Especifica la contraseña de la clave maestra. password es nvarchar.

@action=N'add'
Especifica que se agregará al almacén de credenciales una credencial para la base de datos especificada. La credencial contendrá la contraseña de la clave maestra de la base de datos. El valor pasado a @action es nvarchar.

@action=N'drop'
Especifica que se quitará del almacén de credenciales una credencial para la base de datos especificada. El valor pasado a @action es nvarchar.

Comentarios

Cuando SQL Server necesita una clave maestra de base de datos para descifrar o cifrar una clave, SQL Server intenta descifrar la clave maestra de base de datos con la clave maestra de servicio de la instancia. Si se produce un error en el descifrado, SQL Server busca en el almacén de credenciales las credenciales de clave maestra que tienen el mismo GUID de familia que la base de datos para la que necesita la clave maestra. A continuación, SQL Server intenta descifrar la clave maestra de base de datos 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 que deba estar inaccesible para sa y otras entidades de seguridad de servidor con numerosos privilegios. Puede configurar una base de datos de forma que su jerarquía de claves no pueda descifrarse con la clave maestra de servicio. Esta opción se admite como una defensa para bases de datos que contienen información cifrada que no debe estar accesible para sa u otras entidades de seguridad de servidor con amplios privilegios. Al crear una credencial de clave maestra para esta base de datos se quita la defensa, por lo que sa y otras entidades de seguridad de servidor con numerosos privilegios podrán descifrar la base de datos.

Las credenciales creadas mediante sp_control_dbmasterkey_password están visibles en la vista de catálogo de sys.master_key_passwords . Los nombres de las credenciales creadas para las claves maestras de base de datos presentan el siguiente formato: ##DBMKEY_<database_family_guid>_<random_password_guid>##. La contraseña se almacena como el secreto de la credencial. Para cada contraseña que se agrega al almacén de credenciales hay una fila en sys.credentials.

No puede utilizar sp_control_dbmasterkey_password para crear una credencial para las siguientes bases de datos del sistema: maestra, model, msdb, o tempdb.

sp_control_dbmasterkey_password no comprueba si la contraseña puede abrir la clave maestra de la base de datos especificada.

Si especifica una contraseña ya almacenada en una credencial para la base de datos especificada, sp_control_dbmasterkey_password registrará errores.

Nota:

Dos bases de datos de diferentes instancias de servidor pueden compartir el mismo GUID de familia. Si esto ocurriera, las bases de datos compartirían los mismos registros de clave maestra en el almacén de credenciales.

Los parámetros que se pasan a sp_control_dbmasterkey_password no se muestran en seguimientos.

Nota:

Cuando utiliza la credencial que se agregó mediante sp_control_dbmasterkey_password para abrir la clave maestra de la base de datos, la clave maestra de servicio vuelve a cifrar la clave maestra de la base de datos. Si la base de datos está en modo de solo lectura, se producirá un error en la operación de recifrado y la clave maestra de la base de datos permanecerá sin cifrar. Para el acceso subsiguiente a la clave maestra de la base de datos debe utilizar la instrucción OPEN MASTER KEY 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 maestra. Esto se admite por cuestiones de compatibilidad con versiones anteriores, pero muestra una advertencia. Este comportamiento se ha desaprobado. En una versión futura, la clave maestra debe existir y la contraseña usada en el procedimiento almacenado sp_control_dbmasterkey_password debe ser la misma contraseña que una de las contraseñas usadas para cifrar la clave maestra de base de datos.

Permisos

Requiere la pertenencia al rol fijo de servidor sysadmin .

Ejemplos

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

En el siguiente ejemplo se crea una credencial para la clave maestra de la base de datos AdventureWorks2022 y se guarda la contraseña de la 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 para la clave maestra de una base de datos

En el siguiente ejemplo se quita la credencial creada en el ejemplo A. Tenga en cuenta que son necesarios 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  

Consulte también

Establecer una base de datos reflejada cifrada
Procedimientos almacenados de seguridad (Transact-SQL)
Procedimientos almacenados del sistema (Transact-SQL)
sys.credentials (Transact-SQL)
Credenciales (motor de base de datos)