적용 대상: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 스크립트를 실행하면 기능의 이점이 감소하거나 무효화될 수 있습니다. For more security-related recommendations, see Security Considerations for Key Management.
PowerShell을 사용하여 역할 분리와 관계없이 Always Encrypted 키를 관리할 수 있으며, 키 저장소의 실제 암호화 키에 대한 액세스 권한이나 데이터베이스에 대한 액세스 권한이 있는 사용자를 제어할 수 있습니다.
For more recommendations, see Security Considerations for Key Management.
필수 조건
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은 다음 예제와 같이 해당 데이터베이스를 대상으로 합니다.
Note
This method of connecting to a database works only for SQL Server (it isn't supported in Azure SQL Database).
# 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로 열 암호화, 다시 암호화 또는 암호 해독
Always Encrypted Cmdlet Reference
Always Encrypted에 사용할 수 있는 PowerShell cmdlet은 다음과 같습니다.
CMDLET | 설명 |
---|---|
Add-SqlAzureAuthenticationContext | Azure에 인증을 수행하고 인증 토큰을 획득합니다. |
Add-SqlColumnEncryptionKeyValue | 데이터베이스의 기존 열 암호화 키 개체에 대해 새로 암호화된 값을 추가합니다. |
Complete-SqlColumnMasterKeyRotation | Completes the rotation of a column master key |
Get-SqlColumnEncryptionKey | 데이터베이스에 정의된 모든 열 암호화 키 개체를 반환하거나 지정된 이름의 열 암호화 키 개체 하나를 반환합니다. |
Get-SqlColumnMasterKey | 데이터베이스에 정의된 열 마스터 키 개체를 반환하거나 지정된 이름의 열 마스터 키 개체 하나를 반환합니다. |
Invoke-SqlColumnMasterKeyRotation | Initiates the rotation of a column master key. |
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 SQL 열 암호화 키 제거 명령 | 데이터베이스에서 열 암호화 키 개체를 제거합니다. |
Remove-SqlColumnEncryptionKeyValue | 데이터베이스의 기존 열 암호화 키 개체에서 암호화된 값을 제거합니다. |
Remove-SqlColumnMasterKey | 데이터베이스에서 열 마스터 키 개체를 제거합니다. |
Set-SqlColumnEncryption | 데이터베이스에서 지정된 열을 암호화, 암호 해독 또는 다시 암호화합니다. |