Delen via


sp_control_dbmasterkey_password (Transact-SQL)

van toepassing op:SQL ServerAzure SQL Managed Instance

Hiermee wordt een referentie toegevoegd of verwijderd die het wachtwoord bevat dat nodig is om een databasehoofdsleutel (DMK) te openen.

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

Belangrijk

Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.

@db_name = N'db_name'

Hiermee geeft u de naam op van de database die aan deze referentie is gekoppeld. Kan geen systeemdatabase zijn. @db_name is nvarchar-.

@password = N'wachtwoord'

Hiermee geeft u het wachtwoord van de DMK. @password is nvarchar.

@action = { N'add' | N'drop' }

Hiermee geeft u een actie op voor een referentie voor de opgegeven database in het referentiearchief. De waarde die aan @action wordt doorgegeven, is nvarchar-.

Actie Beschrijving
add Hiermee geeft u op dat een referentie voor de opgegeven database wordt toegevoegd aan het referentiearchief. De referentie bevat het wachtwoord van de DMK.
drop Hiermee geeft u op dat een referentie voor de opgegeven database wordt verwijderd uit het referentiearchief.

Opmerkingen

Wanneer SQL Server een DMK nodig heeft om een sleutel te ontsleutelen of te versleutelen, probeert SQL Server de DMK te ontsleutelen met de servicehoofdsleutel (SMK) van het exemplaar. Als de ontsleuteling mislukt, zoekt SQL Server in het referentiearchief naar referenties met dezelfde familie-GUID als de database waarvoor de sleutel nodig is. SQL Server probeert vervolgens de DMK te ontsleutelen met elke overeenkomende referentie totdat de ontsleuteling slaagt of er zijn geen referenties meer.

Voorzichtigheid

Maak geen hoofdsleutelreferenties voor een database die niet toegankelijk moet zijn voor sa en andere server-principals met hoge bevoegdheden. U kunt een database zodanig configureren dat de sleutelhiërarchie niet kan worden ontsleuteld door de SMK. Deze optie wordt ondersteund als een diepgaande verdediging voor databases die versleutelde informatie bevatten die niet toegankelijk moet zijn voor sa of andere server-principals met hoge bevoegdheden. Als u een referentie voor een dergelijke database maakt, wordt deze diepgaande verdediging verwijderd, waardoor sa en andere server-principals met hoge bevoegdheden de database kunnen ontsleutelen.

Referenties die zijn gemaakt met behulp van sp_control_dbmasterkey_password zijn zichtbaar in de sys.master_key_passwords catalogusweergave. De namen van referenties die voor DMK's worden gemaakt, hebben de volgende indeling: ##DBMKEY_<database_family_guid>_<random_password_guid>##. Het wachtwoord wordt opgeslagen als het referentiegeheim. Elk wachtwoord dat aan het referentiearchief is toegevoegd, heeft een overeenkomende rij in sys.credentials.

U kunt sp_control_dbmasterkey_password niet gebruiken om een referentie te maken voor de volgende systeemdatabases: master, model, msdbof tempdb.

sp_control_dbmasterkey_password controleert niet of het wachtwoord de DMK van de opgegeven database kan openen.

Als u een wachtwoord opgeeft dat al is opgeslagen in een referentie voor de opgegeven database, mislukt sp_control_dbmasterkey_password.

Twee databases van verschillende serverexemplaren kunnen dezelfde gezins-GUID delen. Als dit gebeurt, delen de databases dezelfde DMK-records in het referentiearchief.

Parameters die worden doorgegeven aan sp_control_dbmasterkey_password worden niet weergegeven in traceringen.

Wanneer u de referentie gebruikt die is toegevoegd met behulp van sp_control_dbmasterkey_password om de DMK te openen, wordt de DMK opnieuw versleuteld door de SMK. Als de database zich in de modus Alleen-lezen bevindt, mislukt de herversleutelingsbewerking en blijft de DMK niet versleuteld. Voor volgende toegang tot de DMK moet u de OPEN MASTER KEY-instructie en een wachtwoord gebruiken. Als u wilt voorkomen dat u een wachtwoord gebruikt, moet u de referentie maken voordat u de database verplaatst naar de modus Alleen-lezen.

Mogelijk compatibiliteitsprobleem met eerdere versies

Momenteel controleert de opgeslagen procedure niet of er een sleutel bestaat. Deze functionaliteit is toegestaan voor compatibiliteit met eerdere versies, maar geeft een waarschuwing weer. Dit gedrag is afgeschaft. In een toekomstige release moet de sleutel bestaan en moet het wachtwoord dat wordt gebruikt in de opgeslagen procedure sp_control_dbmasterkey_password hetzelfde wachtwoord zijn als een van de wachtwoorden die worden gebruikt om de DMK te versleutelen.

Machtigingen

Vereist lidmaatschap van de sysadmin vaste serverfunctie, of voer de machtiging rechtstreeks uit voor deze opgeslagen procedure.

Voorbeelden

De codevoorbeelden in dit artikel gebruiken de AdventureWorks2022 of AdventureWorksDW2022 voorbeelddatabase, die u kunt downloaden van de Microsoft SQL Server-voorbeelden en communityprojecten startpagina.

Een. Een referentie maken voor de AdventureWorks-hoofdsleutel

In het volgende voorbeeld wordt een referentie gemaakt voor de AdventureWorks2022 DMK en wordt het hoofdsleutelwachtwoord opgeslagen als het geheim in de referentie. Omdat alle parameters die aan sp_control_dbmasterkey_password worden doorgegeven, van het gegevenstype nvarcharmoeten zijn, worden de tekenreeksen geconverteerd met de cast-operator N.

EXEC sp_control_dbmasterkey_password
    @db_name = N'AdventureWorks2022',
    @password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4',
    @action = N'add';
GO

B. Een referentie voor een databasehoofdsleutel verwijderen

In het volgende voorbeeld wordt de referentie verwijderd die in voorbeeld A is gemaakt. Alle parameters zijn vereist, inclusief het wachtwoord.

EXEC sp_control_dbmasterkey_password
    @db_name = N'AdventureWorks2022',
    @password = N'sdfjlkj#mM00sdfdsf98093258jJlfdk4',
    @action = N'drop';
GO