Compartir a través de


sp_control_dbmasterkey_password (Transact-SQL)

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

Icono de vínculo a temas 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 de tipo nvarchar.

  • @password=N'password'
    Especifica la contraseña de la clave maestra. password es de tipo 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 que se pasa a @action es de tipo nvarchar.

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

Comentarios

Si SQL Server necesita la clave maestra de una base de datos para cifrar o descifrar una clave, SQL Server intentará descifrar la clave maestra de la 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á después descifrar la clave maestra de la base de datos con cada credencial coincidente hasta que el descifrado se realice correctamente o no queden más credenciales.

Nota de advertenciaAdvertencia

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 en profundidad 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 en profundidad, 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 se pueden ver en la vista de catálogo 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: 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 tendrá 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 pasados a sp_control_dbmasterkey_password no aparecen en los 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.

Permisos

Requiere el permiso CONTROL en la base de datos.

Ejemplos

A.Crear una credencial para la clave maestra de AdventureWorks2012

En el siguiente ejemplo se crea una credencial para la clave maestra de la base de datos AdventureWorks2012 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'AdventureWorks2012', 
    @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 se necesitan todos los parámetros, incluida la contraseña.

EXEC sp_control_dbmasterkey_password @db_name = N'AdventureWorks2012', 
    @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)

Conceptos

Establecer una base de datos reflejada cifrada

Credenciales (motor de base de datos)