sp_control_dbmasterkey_password (Transact-SQL)
Agrega o quita una credencial que contiene la contraseña necesaria para abrir la clave maestra de 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. El parámetro database_name es de tipo nvarchar.
- @password= N'password'
Especifica la contraseña de la clave maestra. El parámetro password es de tipo nvarchar.
- @action=N'add'
Especifica que se agregará una credencial para la base de datos especificada en el almacén de credenciales. La credencial contendrá la contraseña de la clave maestra de base de datos. El valor que se pasa a @action es nvarchar.
- @action= N'drop'
Especifica que se quitará una credencial para la base de datos especificada del almacén de credenciales. El valor que se pasa a @action es nvarchar.
Notas
Si SQL Server necesita una clave maestra de base de datos para cifrar o descifrar una clave, SQL Server intentará descifrar la clave maestra de base de datos con la clave maestra de servicio de la instancia. Si el descifrado produce errores, SQL Server buscará en el almacén de credenciales las credenciales de clave maestra con el mismo GUID de familia que la base de datos para la que se necesita la clave maestra. SQL Server intentará descifrar la clave maestra de base de datos con cada credencial coincidente hasta que el descifrado se realice correctamente o no queden más credenciales.
![]() |
---|
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. |
Puede ver las credenciales creadas mediante sp_control_dbmasterkey_password en la vista de catálogo sys.master_key_passwords. Los nombres de credenciales creados 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: master, 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 ocurriese, 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 trazas.
Permisos
Requiere el permiso CONTROL en la base de datos.
Ejemplos
A. Crear una credencial para la clave maestra de AdventureWorks
En el siguiente ejemplo se crea una credencial para la clave maestra de la base de datos AdventureWorks
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 de conversión N
.
EXEC sp_control_dbmasterkey_password @db_name = N'AdventureWorks',
@password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4', @action = N'add';
GO
B. Quitar una credencial para una clave maestra de 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'AdventureWorks',
@password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4', @action = N'drop';
GO
Vea también
Referencia
Procedimientos almacenados de seguridad (Transact-SQL)
Procedimientos almacenados del sistema (Transact-SQL)
sys.credentials (Transact-SQL)
Otros recursos
Establecer una base de datos reflejada cifrada
Credenciales