Dela via


sp_control_dbmasterkey_password (Transact-SQL)

gäller för:SQL ServerAzure 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, msdbeller 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