PowerShell을 사용하여 상시 암호화 구성
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance
SqlServer PowerShell 모듈은 Azure SQL 데이터베이스 또는 SQL Server에서 Always Encrypted 를 구성하기 위한 cmdlet을 제공합니다.
PowerShell을 사용하여 Always Encrypted 구성 시 보안 고려 사항
Always Encrypted의 주요 목표는 데이터베이스 시스템이 손상된 경우에도 암호화된 중요한 데이터를 안전하게 보호하는 것이므로 SQL Server 컴퓨터에서 키 또는 중요한 데이터를 처리하는 PowerShell 스크립트를 실행하면 기능의 이점이 감소하거나 무효화될 수 있습니다. 추가 보안 관련 권장 사항은 키 관리에 대한 보안 고려 사항을 참조하세요.
PowerShell을 사용하여 역할 분리와 관계없이 Always Encrypted 키를 관리할 수 있으며, 키 저장소의 실제 암호화 키에 대한 액세스 권한이나 데이터베이스에 대한 액세스 권한이 있는 사용자를 제어할 수 있습니다.
추가 권장 사항은 키 관리에 대한 보안 고려 사항을 참조하세요.
필수 조건
SQL Server 인스턴스를 호스팅하는 컴퓨터가 아닌 보안 컴퓨터에 SqlServer PowerShell 모듈 버전 22.0.50 이상을 설치합니다. 모듈은 PowerShell 갤러리에서 바로 설치할 수 있습니다. 자세한 내용은 다운로드 지침을 참조하세요.
SqlServer 모듈 가져오기
SqlServer 모듈을 로드하는 방법:
- 적절한 스크립트 실행 정책을 설정하려면 Set-ExecutionPolicy cmdlet을 사용합니다.
- Import-Module cmdlet을 사용하여 SqlServer 모듈을 가져옵니다.
이 예제에서는 SqlServer 모듈을 로드합니다.
# Import the SQL Server Module.
Import-Module "SqlServer" -MinimumVersion 22.0.50
데이터베이스에 연결
Always Encrypted cmdlet 중 일부는 데이터베이스의 데이터 또는 메타데이터와 작동하며, 먼저 데이터베이스에 연결해야 합니다. SqlServer 모듈을 사용하여 Always Encrypted를 구성할 때 데이터베이스에 연결하는 권장 방법 두 가지가 있습니다.
- Get-SqlDatabase cmdlet을 사용하여 연결합니다.
- SQL Server PowerShell 공급자를 사용하여 연결합니다.
Get-SqlDatabase 사용
Get-SqlDatabase cmdlet을 사용하여 SQL Server 또는 Azure SQL Database의 데이터베이스에 연결할 수 있습니다. 이때 데이터베이스 개체가 반환되며, 데이터베이스에 연결하는 cmdlet의 InputObject 매개 변수를 사용하여 전달할 수 있습니다.
SQL Server PowerShell 사용
# Import the SqlServer module
Import-Module "SqlServer" -MinimumVersion 22.0.50
# Connect to your database
# Set the valid server name, database name and authentication keywords in the connection string
$serverName = "<Azure SQL server name>.database.windows.net"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Authentication = Active Directory Integrated"
$database = Get-SqlDatabase -ConnectionString $connStr
# List column master keys for the specified database.
Get-SqlColumnMasterKey -InputObject $database
또는 파이핑을 사용할 수 있습니다.
$database | Get-SqlColumnMasterKey
SQL Server PowerShell 공급자 사용
SQL Server PowerShell 공급자는 SQL Server 개체의 계층 구조를 파일 시스템 경로와 비슷한 경로에 표시합니다. SQL Server PowerShell을 사용하면 일반적으로 파일 시스템 경로를 탐색하는 데 사용하는 명령과 유사한 Windows PowerShell 별칭을 사용하여 경로를 탐색할 수 있습니다. 대상 인스턴스와 데이터베이스로 이동하면 이후 cmdlet은 다음 예제와 같이 해당 데이터베이스를 대상으로 합니다.
참고 항목
데이터베이스에 연결하는 이 방법은 SQL Server에서만 작동합니다(Azure SQL 데이터베이스에서는 지원되지 않음).
# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50
# Navigate to the database in the remote instance.
cd SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase
# List column master keys in the above database.
Get-SqlColumnMasterKey
또는 데이터베이스로 이동하는 대신 제네릭 경로 매개 변수를 사용하여 데이터베이스 경로를 지정할 수 있습니다.
# Import the SqlServer module.
Import-Module "SqlServer" -MinimumVersion 22.0.50
# List column master keys for the specified database.
Get-SqlColumnMasterKey -Path SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase
PowerShell을 사용한 Always Encrypted 작업
- PowerShell을 사용하여 Always Encrypted 키 프로비저닝
- PowerShell을 사용하여 Always Encrypted 키 순환
- PowerShell을 사용하여 Always Encrypted로 열 암호화, 다시 암호화 또는 암호 해독
상시 암호화 Cmdlet 참조
Always Encrypted에 사용할 수 있는 PowerShell cmdlet은 다음과 같습니다.
CMDLET | 설명 |
---|---|
Add-SqlAzureAuthenticationContext | Azure에 인증을 수행하고 인증 토큰을 획득합니다. |
Add-SqlColumnEncryptionKeyValue | 데이터베이스의 기존 열 암호화 키 개체에 대해 새로 암호화된 값을 추가합니다. |
Complete-SqlColumnMasterKeyRotation | 열 마스터 키 순환을 완료합니다. |
Get-SqlColumnEncryptionKey | 데이터베이스에 정의된 모든 열 암호화 키 개체를 반환하거나 지정된 이름의 열 암호화 키 개체 하나를 반환합니다. |
Get-SqlColumnMasterKey | 데이터베이스에 정의된 열 마스터 키 개체를 반환하거나 지정된 이름의 열 마스터 키 개체 하나를 반환합니다. |
Invoke-SqlColumnMasterKeyRotation | 열 마스터 키 순환을 시작합니다. |
New-SqlAzureKeyVaultColumnMasterKeySettings | Azure Key Vault에 저장된 비대칭 키를 설명하는 SqlColumnMasterKeySettings 개체를 만듭니다. |
New-SqlCngColumnMasterKeySettings | CNG(Cryptography Next Generation) API를 지원하는 키 저장소에 저장된 비대칭 키를 설명하는 SqlColumnMasterKeySettings 개체를 만듭니다. |
New-SqlColumnEncryptionKey | 데이터베이스에 열 암호화 키 개체를 만듭니다. |
New-SqlColumnEncryptionKeyEncryptedValue | 열 암호화 키의 암호화된 값을 생성합니다. |
New-SqlColumnEncryptionSettings | CEK 및 암호화 유형을 포함하여 단일 열의 암호화에 대한 정보를 캡슐화하는 SqlColumnEncryptionSettings 개체를 만듭니다. |
New-SqlColumnMasterKey | 데이터베이스에 열 마스터 키 개체를 만듭니다. |
New-SqlColumnMasterKeySettings | 지정된 공급자 및 키 경로를 사용하여 열 마스터 키에 대한 SqlColumnMasterKeySettings 개체를 만듭니다. |
New-SqlCspColumnMasterKeySettings | CAPI(암호화 API)를 지원하는 CSP(Cryptography Service Provider)가 있는 키 저장소에 저장된 비대칭 키를 설명하는 SqlColumnMasterKeySettings 개체를 만듭니다. |
Remove-SqlColumnEncryptionKey | 데이터베이스에서 열 암호화 키 개체를 제거합니다. |
Remove-SqlColumnEncryptionKeyValue | 데이터베이스의 기존 열 암호화 키 개체에서 암호화된 값을 제거합니다. |
Remove-SqlColumnMasterKey | 데이터베이스에서 열 마스터 키 개체를 제거합니다. |
Set-SqlColumnEncryption | 데이터베이스에서 지정된 열을 암호화, 암호 해독 또는 다시 암호화합니다. |