Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Managed Instance
Lägger till eller släpper en autentiseringsuppgift som innehåller det lösenord som krävs för att öppna en databashuvudnyckel (DMK).
Transact-SQL syntaxkonventioner
Syntax
sp_control_dbmasterkey_password @db_name = 'db_name'
, @password = 'password'
, @action = { N'add' | N'drop' }
Argument
Viktig
Argument för utökade lagrade procedurer måste anges i den specifika ordning som beskrivs i avsnittet Syntax. Om parametrarna anges i fel ordning visas ett felmeddelande.
@db_name = N'db_name'
Anger namnet på databasen som är associerad med den här autentiseringsuppgiften. Det kan inte vara en systemdatabas. @db_name är nvarchar.
@password = N'lösenord'
Anger lösenordet för DMK. @password är nvarchar.
@action = { N'add' | N'drop' }
Anger en åtgärd för en autentiseringsuppgift för den angivna databasen i arkivet för autentiseringsuppgifter. Värdet som skickas till @action är nvarchar.
Handling | Beskrivning |
---|---|
add |
Anger att en autentiseringsuppgift för den angivna databasen ska läggas till i arkivet för autentiseringsuppgifter. Autentiseringsuppgifterna innehåller lösenordet för DMK. |
drop |
Anger att en autentiseringsuppgift för den angivna databasen kommer att tas bort från arkivet för autentiseringsuppgifter. |
Anmärkningar
När SQL Server behöver en DMK för att dekryptera eller kryptera en nyckel försöker SQL Server dekryptera DMK med instansens tjänsthuvudnyckel (SMK). Om dekrypteringen misslyckas söker SQL Server i autentiseringsarkivet efter autentiseringsuppgifter som har samma familje-GUID som databasen som den behöver nyckeln för. SQL Server försöker sedan dekryptera DMK med varje matchande autentiseringsuppgifter tills dekrypteringen lyckas eller så finns det inga fler autentiseringsuppgifter.
Försiktighet
Skapa inte en huvudnyckelautentiseringsuppgift för en databas som måste vara otillgänglig för sa
och andra högprivilegierade serverobjekt. Du kan konfigurera en databas så att dess nyckelhierarki inte kan dekrypteras av SMK. Det här alternativet stöds som ett skydd på djupet för databaser som innehåller krypterad information som inte ska vara tillgänglig för sa
eller andra högprivilegierade serverobjekt. När du skapar en autentiseringsuppgift för en sådan databas tar du bort detta skydd på djupet, vilket gör det möjligt för sa
och andra högprivilegierade serverhuvudnamn att dekryptera databasen.
Autentiseringsuppgifter som skapas med hjälp av sp_control_dbmasterkey_password
visas i sys.master_key_passwords katalogvyn. Namnen på autentiseringsuppgifterna som skapas för DMK:er har följande format: ##DBMKEY_<database_family_guid>_<random_password_guid>##
. Lösenordet lagras som hemligheten för autentiseringsuppgifter. Varje lösenord som läggs till i arkivet för autentiseringsuppgifter har en matchande rad i sys.credentials
.
Du kan inte använda sp_control_dbmasterkey_password
för att skapa en autentiseringsuppgift för följande systemdatabaser: master
, model
, msdb
eller tempdb
.
sp_control_dbmasterkey_password
kontrollerar inte att lösenordet kan öppna DMK för den angivna databasen.
Om du anger ett lösenord som redan lagras i en autentiseringsuppgift för den angivna databasen misslyckas sp_control_dbmasterkey_password
.
Två databaser från olika serverinstanser kan dela samma familjs GUID. Om detta inträffar delar databaserna samma DMK-poster i arkivet för autentiseringsuppgifter.
Parametrar som skickas till sp_control_dbmasterkey_password
visas inte i spårningar.
När du använder autentiseringsuppgifterna som lades till med hjälp av sp_control_dbmasterkey_password
för att öppna DMK krypteras DMK igen av SMK. Om databasen är i skrivskyddat läge misslyckas omkrypteringsåtgärden och DMK förblir okrypterad. För efterföljande åtkomst till DMK måste du använda OPEN MASTER KEY
-instruktionen och ett lösenord. Undvik att använda ett lösenord genom att skapa autentiseringsuppgifterna innan du flyttar databasen till skrivskyddat läge.
Potentiellt problem med bakåtkompatibilitet
Den lagrade proceduren kontrollerar för närvarande inte om det finns någon nyckel. Den här funktionen är tillåten för bakåtkompatibilitet, men visar en varning. Det här beteendet är inaktuellt. I en framtida version måste nyckeln finnas och lösenordet som används i den lagrade proceduren sp_control_dbmasterkey_password
måste vara samma lösenord som ett av de lösenord som används för att kryptera DMK.
Behörigheter
Kräver medlemskap i sysadmin fast serverroll eller kör behörighet direkt på den här lagrade proceduren.
Exempel
Kodexemplen i den här artikeln använder AdventureWorks2022
- eller AdventureWorksDW2022
-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.
A. Skapa en autentiseringsuppgift för AdventureWorks-huvudnyckeln
I följande exempel skapas en autentiseringsuppgift för AdventureWorks2022
DMK och lösenordet för huvudnyckeln sparas som hemlighet i autentiseringsuppgiften. Eftersom alla parametrar som skickas till sp_control_dbmasterkey_password
måste vara av datatyp nvarcharkonverteras textsträngarna med gjutningsoperatorn N
.
EXEC sp_control_dbmasterkey_password
@db_name = N'AdventureWorks2022',
@password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4',
@action = N'add';
GO
B. Ta bort en autentiseringsuppgift för en databashuvudnyckel
Följande exempel tar bort autentiseringsuppgifterna som skapats i exempel A. Alla parametrar krävs, inklusive lösenordet.
EXEC sp_control_dbmasterkey_password
@db_name = N'AdventureWorks2022',
@password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4',
@action = N'drop';
GO