Configure Always Encrypted using PowerShellConfigure Always Encrypted using PowerShell

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SqlServer PowerShell モジュールは、Azure SQL Database および SQL Server 2016 両方で Always Encrypted を構成するコマンドレットを提供します。The SqlServer PowerShell module provides cmdlets for configuring Always Encrypted in both Azure SQL Database and SQL Server 2016.

SqlServer モジュールの Always Encrypted コマンドレットはキーまたは機密データを操作するので、安全なコンピューターでコマンドレットを実行することが重要です。Always Encrypted cmdlets in the SqlServer module work with keys or sensitive data, so it is important that you run the cmdlets on a secure computer. Always Encrypted を管理するときは、SQL Server インスタンスをホストするコンピューターとは異なるコンピューターからコマンドレットを実行します。When managing Always Encrypted, execute the cmdlets from a different computer than the computer hosting your SQL Server instance.

Always Encrypted の主な目的は、データベース システムが侵害されても、暗号化された機密データが確実に保護されるようにすることにあるので、SQL Server コンピューター上でキーまたは機密データを処理する PowerShell スクリプトが実行されると、機能の効果が低下したり無効になったりするおそれがあります。Because the primary goal of Always Encrypted is to ensure encrypted sensitive data is safe, even if the database system gets compromised, executing a PowerShell script that processes keys or sensitive data on the SQL Server computer can reduce or defeat the benefits of the feature. セキュリティ関連のその他の推奨事項については、 Security Considerations for Key Management(キー管理でのセキュリティに関する考慮事項) をご覧ください。For additional security-related recommendations, see Security Considerations for Key Management.

個々のコマンドレットに関する記事へのリンクは このページの下にあります。Links to the individual cmdlet articles are at the bottom of this page.

PrerequisitesPrerequisites

SQL Server インスタンスをホストしているコンピューターではない安全なコンピューターに SqlServer モジュール をインストールします。Install the SqlServer module on a secure computer that is NOT a computer hosting your SQL Server instance. モジュールは、PowerShell ギャラリーから直接インストールできます。The module can be installed directly from the PowerShell gallery. 詳細については、ダウンロードの手順を参照してください。See the download instructions for more details.

SqlServer モジュールをインポートするImporting the SqlServer Module

SqlServer モジュールを読み込むには:To load the SqlServer module:

  1. 適切なスクリプト実行ポリシーを設定するには、 Set-ExecutionPolicy コマンドレットを使用します。Use the Set-ExecutionPolicy cmdlet to set the appropriate script execution policy.
  2. SqlServer モジュールをインポートするには、 Import-Module コマンドレットを使用します。Use the Import-Module cmdlet to import the SqlServer module.

次に示すのは SqlServer モジュールを読み込む例です。This example loads the SqlServer module.

# Import the SQL Server Module.  
Import-Module "SqlServer" 

データベースに接続するConnecting to a Database

一部の Always Encrypted コマンドレットはデータベースのデータまたはメタデータを操作するので、最初にデータベースに接続する必要があります。Some of the Always Encrypted cmdlets work with data or metadata in the database and require that you connect to the database first. SqlServer モジュールを使用して Always Encrypted を構成するときに推奨されるデータベース接続方法は次の 2 つです。There are two recommended methods of connecting to a database when configuring Always Encrypted using the SqlServer module:

  1. SQL Server PowerShell を使用して接続します。Connect using SQL Server PowerShell.
  2. SQL Server 管理オブジェクト (SMO) を使用して接続します。Connect using SQL Server Management Objects (SMO).

フィードバックをお待ちしております。 この記事の手順やコード例の中で、古い情報や間違っている情報を見つけた場合は、ぜひお知らせください。We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. このページの下部にある [フィードバック] セクション内で [このページ] ボタンをクリックしてください。You can click the This page button in the Feedback section at the bottom of this page. SQL に関するフィードバックのすべての項目に目を通しています (通常は翌日)。We read every item of feedback about SQL, typically the next day. よろしくお願いいたします。Thanks.

SQL Server PowerShell の使用Using SQL Server PowerShell

この方法は SQL Server の場合にのみ使用できます (Azure SQL Database では使用できません)。This method works only for SQL Server (it is not supported in Azure SQL Database).

SQL Server PowerShell では、ファイル システムのパスの操作に一般的に使用されているコマンドと同様の Windows PowerShell の別名を使用して、パスを操作できます。With SQL Server PowerShell, you can navigate the paths using Windows PowerShell aliases similar to the commands you typically use to navigate file system paths. ターゲットのインスタンスおよびデータベースに移動した後、後続のコマンドレットは次の例で示すようにそのデータベースをターゲットにします。Once you navigate to the target instance and the database, the subsequent cmdlets target that database, as shown in the following example:

# Import the SqlServer module.
Import-Module "SqlServer"
# 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

データベースに移動する代わりに、汎用の Path パラメーターを使用してデータベース パスを指定することもできます。Alternatively, you can specify a database path using the generic Path parameter, instead of navigating to the database.

# Import the SqlServer module.
Import-Module "SqlServer" 
# List column master keys for the specified database.
Get-SqlColumnMasterKey -Path SQLSERVER:\SQL\servercomputer\DEFAULT\Databases\yourdatabase

SMO の使用Using SMO

この方法は、Azure SQL Database と SQL Server の両方に使用できます。This method works for both Azure SQL Database and SQL Server. SMO では、 データベース クラスのオブジェクトを作成した後、コマンドレットの InputObject パラメーターを使用してデータベースに接続するオブジェクトを渡すことができます。With SMO, you can create an object of the Database Class, and then pass the object using the InputObject parameter of a cmdlet that connects to the database.

# Import the SqlServer module
Import-Module "SqlServer"  

# Connect to your database (Azure SQL database).
$serverName = "<Azure SQL server name>.database.windows.net"
$databaseName = "<database name>"
$connStr = "Server = " + $serverName + "; Database = " + $databaseName + "; Authentication = Active Directory Integrated"
$connection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
$connection.ConnectionString = $connStr
$connection.Connect()
$server = New-Object Microsoft.SqlServer.Management.Smo.Server($connection)
$database = $server.Databases[$databaseName] 

# List column master keys for the specified database.
Get-SqlColumnMasterKey -InputObject $database

代わりに、パイプを使用することもできます。Alternatively, you can use piping:

$database | Get-SqlColumnMasterKey

PowerShell を使用した Always Encrypted のタスクAlways Encrypted Tasks using PowerShell

Always Encrypted コマンドレット リファレンスAlways Encrypted Cmdlet Reference

Always Encrypted では次の PowerShell コマンドレットを使用できます。The following PowerShell cmdlets are available for Always Encrypted:

コマンドレットCMDLET [説明]Description
Add-SqlAzureAuthenticationContextAdd-SqlAzureAuthenticationContext Azure への認証を実行し、認証トークンを取得します。Performs authentication to Azure and acquires an authentication token.
Add-SqlColumnEncryptionKeyValueAdd-SqlColumnEncryptionKeyValue データベースの既存の列暗号化キー オブジェクトに新しく暗号化された値を追加します。Adds a new encrypted value for an existing column encryption key object in the database.
Complete-SqlColumnMasterKeyRotationComplete-SqlColumnMasterKeyRotation 列マスター キーのローテーションを完了します。Completes the rotation of a column master key
Get-SqlColumnEncryptionKeyGet-SqlColumnEncryptionKey データベースで定義されているすべての列暗号化キー オブジェクトを返すか、指定された名前の特定の列暗号化キー オブジェクトを返します。Returns all column encryption key objects defined in the database, or returns one column encryption key object with the specified name.
Get-SqlColumnMasterKeyGet-SqlColumnMasterKey データベースで定義されている列マスター キー オブジェクトを返すか、指定された名前の特定の列マスター キー オブジェクトを返します。Returns the column master key objects defined in the database, or returns one column master key object with the specified name.
Invoke-SqlColumnMasterKeyRotationInvoke-SqlColumnMasterKeyRotation 列マスター キーのローテーションを開始します。Initiates the rotation of a column master key.
New-SqlAzureKeyVaultColumnMasterKeySettingsNew-SqlAzureKeyVaultColumnMasterKeySettings Azure Key Vault に格納されている非対称キーを記述する SqlColumnMasterKeySettings オブジェクトを作成します。Creates a SqlColumnMasterKeySettings object describing an asymmetric key stored in Azure Key Vault.
New-SqlCngColumnMasterKeySettingsNew-SqlCngColumnMasterKeySettings Cryptography Next Generation (CNG) API をサポートするキー ストアに格納されている非対称キーを記述する SqlColumnMasterKeySettings オブジェクトを作成します。Creates a SqlColumnMasterKeySettings object describing an asymmetric key stored in a key store supporting the Cryptography Next Generation (CNG) API.
New-SqlColumnEncryptionKeyNew-SqlColumnEncryptionKey データベースに列暗号化キー オブジェクトを作成します。Creates a column encryption key object in the database.
New-SqlColumnEncryptionKeyEncryptedValueNew-SqlColumnEncryptionKeyEncryptedValue 列暗号化キーの暗号化された値を生成します。Produces an encrypted value of a column encryption key.
New-SqlColumnEncryptionSettingsNew-SqlColumnEncryptionSettings 1 つの列の暗号化に関する情報をカプセル化する SqlColumnEncryptionSettings オブジェクトを作成します。CEK と暗号化の種類を含みます。Creates a SqlColumnEncryptionSettings object that encapsulates information about a single column's encryption, including CEK and encryption type.
New-SqlColumnMasterKeyNew-SqlColumnMasterKey データベースに列マスター キー オブジェクトを作成します。Creates a column master key object in the database.
New-SqlColumnMasterKeySettingsNew-SqlColumnMasterKeySettings 指定されたプロバイダーとキーのパスを使用して、列マスター キーの SqlColumnMasterKeySettings オブジェクトを作成します。Creates a SqlColumnMasterKeySettings object for a column master key with the specified provider and key path.
New-SqlCspColumnMasterKeySettingsNew-SqlCspColumnMasterKeySettings Cryptography API (CAPI) をサポートする暗号化サービス プロバイダー (CSP) によってキー ストアに格納されている非対称キーを記述する SqlColumnMasterKeySettings オブジェクトを作成します。Creates a SqlColumnMasterKeySettings object describing an asymmetric key stored in a key store with a Cryptography Service Provider (CSP) supporting Cryptography API (CAPI).
Remove-SqlColumnEncryptionKeyRemove-SqlColumnEncryptionKey データベースから列暗号化キー オブジェクトを削除します。Removes the column encryption key object from the database.
Remove-SqlColumnEncryptionKeyValueRemove-SqlColumnEncryptionKeyValue データベースの既存の列暗号化キー オブジェクトから暗号化された値を削除します。Removes an encrypted value from an existing column encryption key object in the database.
Remove-SqlColumnMasterKeyRemove-SqlColumnMasterKey データベースから列マスター キー オブジェクトを削除します。Removes the column master key object from the database.
Set-SqlColumnEncryptionSet-SqlColumnEncryption データベースの指定された列を暗号化、復号化、または再暗号化します。Encrypts, decrypts, or re-encrypts specified columns in the database.

その他のリソースAdditional Resources