Udostępnij za pośrednictwem


sp_control_dbmasterkey_password (Transact-SQL)

Dotyczy:programu SQL ServerAzure SQL Managed Instance

Dodaje lub odrzuca poświadczenia zawierające hasło potrzebne do otwarcia klucza głównego bazy danych (DMK).

Transact-SQL konwencje składni

Składnia

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

Argumenty

Ważny

Argumenty dla rozszerzonych procedur składowanych należy wprowadzić w określonej kolejności zgodnie z opisem w sekcji składni. Jeśli parametry są wprowadzane poza kolejnością, wystąpi komunikat o błędzie.

@db_name = N'db_name'

Określa nazwę bazy danych skojarzonej z tym poświadczeniu. Nie można być systemową bazą danych. @db_name to nvarchar.

@password = N'password'

Określa hasło zestawu DMK. @password to nvarchar.

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

Określa akcję poświadczenia dla określonej bazy danych w magazynie poświadczeń. Wartość przekazana do @action to nvarchar.

Akcja Opis
add Określa, że poświadczenia dla określonej bazy danych zostaną dodane do magazynu poświadczeń. Poświadczenie zawiera hasło klucza DMK.
drop Określa, że poświadczenie dla określonej bazy danych zostanie usunięte z magazynu poświadczeń.

Uwagi

Gdy program SQL Server potrzebuje klucza DMK do odszyfrowania lub zaszyfrowania klucza, program SQL Server próbuje odszyfrować klucz DMK przy użyciu klucza głównego usługi (SMK) wystąpienia. Jeśli odszyfrowywanie zakończy się niepowodzeniem, program SQL Server przeszukuje magazyn poświadczeń dla poświadczeń, które mają ten sam identyfikator GUID rodziny co baza danych, dla której potrzebuje klucza. Następnie program SQL Server próbuje odszyfrować klucz DMK z każdym pasującym poświadczeniem, dopóki odszyfrowanie nie powiedzie się lub nie będzie więcej poświadczeń.

Ostrożność

Nie należy tworzyć poświadczeń klucza głównego dla bazy danych, która musi być niedostępna do sa i innych podmiotów zabezpieczeń serwera o wysokim poziomie uprawnień. Bazę danych można skonfigurować tak, aby jej hierarchia kluczy nie mogła zostać odszyfrowana przez protokół SMK. Ta opcja jest obsługiwana jako ochrona szczegółowa dla baz danych zawierających zaszyfrowane informacje, które nie powinny być dostępne dla sa lub innych podmiotów z wysokimi uprawnieniami serwera. Utworzenie poświadczeń dla takiej bazy danych powoduje usunięcie tej ochrony w głębi systemu, umożliwiając sa i inne podmioty z wysokimi uprawnieniami serwera w celu odszyfrowania bazy danych.

Poświadczenia tworzone przy użyciu sp_control_dbmasterkey_password są widoczne w widoku wykazu sys.master_key_passwords. Nazwy poświadczeń utworzonych dla zestawów DMK mają następujący format: ##DBMKEY_<database_family_guid>_<random_password_guid>##. Hasło jest przechowywane jako wpis tajny poświadczeń. Każde hasło dodane do magazynu poświadczeń ma pasujący wiersz w sys.credentials.

Nie można użyć sp_control_dbmasterkey_password do utworzenia poświadczeń dla następujących systemowych baz danych: master, model, msdblub tempdb.

sp_control_dbmasterkey_password nie sprawdza, czy hasło może otworzyć klucz DMK określonej bazy danych.

Jeśli określisz hasło, które jest już przechowywane w poświadczeniu dla określonej bazy danych, sp_control_dbmasterkey_password zakończy się niepowodzeniem.

Dwie bazy danych z różnych wystąpień serwera mogą współdzielić ten sam identyfikator GUID rodziny. W takim przypadku bazy danych współdzielą te same rekordy DMK w magazynie poświadczeń.

Parametry przekazane do sp_control_dbmasterkey_password nie są wyświetlane w śladach.

Gdy używasz poświadczeń, które zostały dodane przy użyciu sp_control_dbmasterkey_password do otwierania zestawu DMK, klucz DMK jest ponownie szyfrowany przez protokół SMK. Jeśli baza danych jest w trybie tylko do odczytu, operacja ponownego szyfrowania zakończy się niepowodzeniem, a klucz DMK pozostanie niezaszyfrowany. Aby uzyskać kolejny dostęp do zestawu DMK, należy użyć instrukcji OPEN MASTER KEY i hasła. Aby uniknąć używania hasła, utwórz poświadczenie przed przeniesieniem bazy danych do trybu tylko do odczytu.

Potencjalny problem ze zgodnością z poprzednimi wersjami

Obecnie procedura składowana nie sprawdza, czy klucz istnieje. Ta funkcja jest dozwolona w celu zapewnienia zgodności z poprzednimi wersjami, ale wyświetla ostrzeżenie. To zachowanie jest przestarzałe. W przyszłej wersji klucz musi istnieć, a hasło używane w procedurze składowanej sp_control_dbmasterkey_password musi być tym samym hasłem co jedno z haseł używanych do szyfrowania klucza DMK.

Uprawnienia

Wymaga członkostwa w sysadmin stałej roli serwera lub wykonywania uprawnień bezpośrednio w tej procedurze składowanej.

Przykłady

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2022 lub AdventureWorksDW2022, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

A. Tworzenie poświadczeń dla klucza głównego AdventureWorks

Poniższy przykład tworzy poświadczenie dla zestawu DMK AdventureWorks2022 i zapisuje hasło klucza głównego jako wpis tajny w poświadczeniu. Ponieważ wszystkie parametry przekazywane do sp_control_dbmasterkey_password muszą być typu danych nvarchar, ciągi tekstowe są konwertowane za pomocą operatora rzutowania N.

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

B. Usuwanie poświadczeń dla klucza głównego bazy danych

Poniższy przykład usuwa poświadczenia utworzone w przykładzie A. Wszystkie parametry są wymagane, w tym hasło.

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