Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure 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
, msdb
of 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