다음을 통해 공유


sp_control_dbmasterkey_password(Transact-SQL)

적용 대상: SQL Server Azure SQL Managed Instance

DMK(데이터베이스 마스터 키)를 여는 데 필요한 암호를 포함하는 자격 증명을 추가하거나 삭제합니다.

Transact-SQL 구문 표기 규칙

구문

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

인수

@db_name= N'db_name'

이 자격 증명과 연결된 데이터베이스의 이름을 지정합니다. 시스템 데이터베이스가 될 수 없습니다. @db_name nvarchar입니다.

@password= N'password'

DMK의 암호를 지정합니다. @password nvarchar입니다.

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

자격 증명 저장소의 지정된 데이터베이스에 대한 자격 증명에 대한 작업을 지정합니다. @action 전달된 값은 nvarchar입니다.

작업 설명
add 지정된 데이터베이스에 대한 자격 증명이 자격 증명 저장소에 추가되도록 지정합니다. 자격 증명에는 DMK의 암호가 포함됩니다.
drop 지정된 데이터베이스에 대한 자격 증명이 자격 증명 저장소에서 삭제되도록 지정합니다.

설명

SQL Server에서 키를 해독하거나 암호화하는 데 DMK가 필요한 경우 SQL Server는 인스턴스의 SMK(서비스 마스터 키)를 사용하여 DMK의 암호를 해독하려고 합니다. 암호 해독이 실패하면 SQL Server는 자격 증명 저장소에서 키가 필요한 데이터베이스와 동일한 패밀리 GUID가 있는 자격 증명을 검색합니다. 그런 다음 SQL Server는 암호 해독이 성공하거나 더 이상 자격 증명이 없을 때까지 일치하는 각 자격 증명으로 DMK의 암호를 해독하려고 합니다.

주의

액세스할 수 sa 없는 데이터베이스 및 기타 높은 권한이 있는 서버 보안 주체에 대한 마스터 키 자격 증명을 만들지 마세요. SMK에서 키 계층을 해독할 수 없도록 데이터베이스를 구성할 수 있습니다. 이 옵션은 액세스하거나 권한이 높은 다른 서버 보안 주체에 액세스할 수 없는 암호화된 정보를 포함하는 데이터베이스에 sa 대한 심층 방어로 지원됩니다. 이러한 데이터베이스에 대한 자격 증명을 만들면 이 심층 방어 기능이 제거되어 데이터베이스의 암호를 해독할 수 있는 sa 권한 있는 다른 서버 보안 주체가 사용됩니다.

사용하여 sp_control_dbmasterkey_password 만든 자격 증명은 sys.master_key_passwords 카탈로그 뷰에 표시됩니다. DMK에 대해 만들어진 자격 증명의 이름은 다음과 같은 형식 ##DBMKEY_<database_family_guid>_<random_password_guid>##입니다. 암호는 자격 증명 비밀로 저장됩니다. 자격 증명 저장소에 추가된 각 암호에는 일치하는 행이 있습니다 sys.credentials.

다음 시스템 데이터베이스에 대한 자격 증명을 만드는 데 사용할 sp_control_dbmasterkey_password 수 없습니다. mastermodelmsdbtempdb

sp_control_dbmasterkey_password 에서는 암호가 지정된 데이터베이스의 DMK를 열 수 있는지 확인하지 않습니다.

지정된 데이터베이스 sp_control_dbmasterkey_password 에 대한 자격 증명에 이미 저장된 암호를 지정하면 실패합니다.

다른 서버 인스턴스에 있는 두 데이터베이스는 같은 패밀리 GUID를 공유할 수 있습니다. 이 경우 데이터베이스는 자격 증명 저장소에서 동일한 DMK 레코드를 공유합니다.

전달된 매개 변수는 sp_control_dbmasterkey_password 추적에 표시되지 않습니다.

DMK를 여는 데 사용하여 추가된 자격 증명을 사용하는 sp_control_dbmasterkey_password 경우 DMK는 SMK에 의해 다시 암호화됩니다. 데이터베이스가 읽기 전용 모드인 경우 다시 암호화 작업이 실패하고 DMK가 암호화되지 않은 상태로 유지됩니다. DMK에 대한 후속 액세스의 경우 문과 암호를 사용해야 OPEN MASTER KEY 합니다. 암호를 사용하지 않도록 하려면 데이터베이스를 읽기 전용 모드로 이동하기 전에 자격 증명을 만듭니다.

잠재적인 이전 버전과의 호환성 문제

현재 저장 프로시저는 키가 있는지 여부를 확인하지 않습니다. 이 기능은 이전 버전과의 호환성을 위해 허용되지만 경고를 표시합니다. 이 기능은 더 이상 지원되지 않습니다. 이후 릴리스에서는 키가 있어야 하며 저장 프로시저 sp_control_dbmasterkey_password 에 사용된 암호는 DMK를 암호화하는 데 사용되는 암호 중 하나와 동일한 암호여야 합니다.

사용 권한

sysadmin 고정 서버 역할의 멤버 자격이 필요하거나 이 저장 프로시저에 대한 권한을 직접 실행해야 합니다.

예제

이 문서의 Transact-SQL 코드 샘플은 AdventureWorks2022 또는 AdventureWorksDW2022 샘플 데이터베이스를 사용하며, 이는 Microsoft SQL Server 예시 및 커뮤니티 프로젝트(Microsoft SQL Server Samples and Community Projects) 홈 페이지에서 다운로드할 수 있습니다.

A. AdventureWorks 마스터 키에 대한 자격 증명 만들기

다음 예제에서는 DMK에 대한 자격 증명을 AdventureWorks2022 만들고 마스터 키 암호를 자격 증명의 비밀로 저장합니다. 전달되는 sp_control_dbmasterkey_password 모든 매개 변수는 nvarchar 데이터 형식이어야 하므로 텍스트 문자열은 캐스팅 연산N자를 사용하여 변환됩니다.

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

B. 데이터베이스 마스터 키에 대한 자격 증명 삭제

다음 예제에서는 예제 A에서 만든 자격 증명을 제거합니다. 암호를 포함하여 모든 매개 변수가 필요합니다.

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