sqlcmd で Microsoft Entra ID を使用して認証する
適用対象: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
sqlcmd では、インストールしたバージョンに応じて、さまざまな Microsoft Entra 認証モデルがサポートされます。
Note
Microsoft Entra ID はAzure Active Directory (Azure AD) の新しい名前ですが、既存の環境の中断を防ぐために、UI フィールド、接続プロバイダー、エラー コード、コマンドレットなど、ハードコーディングされた一部の要素でAzure AD が残ります。 この記事では、2 つの名前は交換可能です。
sqlcmd バージョンの違いの詳細については、「sqlcmd ユーティリティ」を参照してください。
sqlcmd (Go) では、azidentity パッケージに基づいて、より多くの Microsoft Entra 認証モデルがサポートされています。 この実装は、go-sqlcmd ドライバーの Microsoft Entra コネクタに基づきます。
コマンド ライン引数
Microsoft Entra 認証を使用するために、2 つのコマンド ライン スイッチのいずれかを使用できます。
-G
は (ほとんどの場合) sqlcmd (ODBC) での使用法と互換性があります。 ユーザー名とパスワードが指定されている場合、Microsoft Entra パスワード認証を使って認証されます。 ユーザー名が指定されている場合、Microsoft Entra 対話型認証が使われ、Web ブラウザーが表示される場合があります。 ユーザー名またはパスワードが指定されていない場合、さまざまなメカニズムを使って認証を試みる DefaultAzureCredential
が使われます。
--authentication-method=
を使用して、次のいずれかの種類の認証を指定できます。
ActiveDirectoryDefault
- このモードで使用される認証の種類の概要については、既定の Azure 資格情報に関するページを参照してください。
- Azure のローカル開発環境と運用環境デプロイの両方でデータベース自動化スクリプトを実行する場合、この方法を選択します。 開発環境では、クライアント シークレットまたは Azure CLI ログインを使用できます。 開発環境からスクリプトを変更しなくても、運用環境デプロイでマネージド ID またはクライアント シークレットを使用できます。
- 環境変数
AZURE_TENANT_ID
とAZURE_CLIENT_ID
の設定は、DefaultAzureCredential
が環境構成のチェックを開始し、認証のために次に示すその他の環境変数のいずれかを探すために必要です。- 環境変数
AZURE_CLIENT_SECRET
を設定すると、DefaultAzureCredential
がClientSecretCredential
を選択するように構成されます。 - 環境変数
AZURE_CLIENT_CERTIFICATE_PATH
を設定すると、AZURE_CLIENT_SECRET
が設定されていない場合にClientCertificateCredential
を選択するようにDefaultAzureCredential
が構成されます。
- 環境変数
- 環境変数 AZURE_USERNAME を設定すると、
AZURE_CLIENT_SECRET
とAZURE_CLIENT_CERTIFICATE_PATH
が設定されていない場合にUsernamePasswordCredential
を選択するようにDefaultAzureCredential
が構成されます。
ActiveDirectoryIntegrated
このメソッドは現在実装されておらず、ActiveDirectoryDefault
にフォールバックします。
ActiveDirectoryPassword
このメソッドでは、ユーザー名とパスワードを使って認証が行われます。 MFA が必要な場合は機能しません。
通常のコマンド ライン スイッチまたは
SQLCMD
環境変数を使用して、ユーザー名とパスワードを指定します。ユーザーの既定テナントを使用しない場合は、
AZURE_TENANT_ID
環境変数をサーバーのテナント ID に設定します。
ActiveDirectoryInteractive
このメソッドでは、ユーザーを認証するために Web ブラウザーが起動されます。
ActiveDirectoryManagedIdentity
システム割り当てまたはユーザー割り当てのマネージド ID を持つ Azure VM で sqlcmd (Go) を実行する場合、このメソッドを使用します。 ユーザー割り当てマネージド ID を使用する場合、ユーザー名をマネージド ID の クライアント ID に設定します。 システム割り当て ID を使用する場合、ユーザー名を空のままにします。
この例では、サービス割り当てマネージド ID (SAMI) を使用して接続する方法を示します。
-S testsrv.database.windows.net -d Target_DB_or_DW --authentication-method ActiveDirectoryManagedIdentity
この例では、ユーザー割り当てマネージド ID のクライアント ID を追加して、ユーザー割り当てマネージド ID (UAMI) に接続する方法を示します。
-S testsrv.database.windows.net -d Target_DB_or_DW --authentication-method ActiveDirectoryManagedIdentity -U <user-assigned-managed-identity-client-id>
ActiveDirectoryServicePrincipal
このメソッドは、指定されたユーザー名をサービス プリンシパル ID として認証し、パスワードをサービス プリンシパルのクライアント シークレットとして認証します。 <service principal id>@<tenant id>
という形式でユーザー名を指定します。 SQLCMDPASSWORD
変数をクライアント シークレットに設定します。 クライアント シークレットではなく証明書を使用する場合、AZURE_CLIENT_CERTIFICATE_PATH
環境変数を証明書ファイルのパスに設定します。
Microsoft Entra 認証のための環境変数
Microsoft Entra 認証の一部の設定ではコマンド ライン入力は使われず、一部の環境変数は、sqlcmd (Go)で使われる azidentity
パッケージによって直接使われます。
これらの環境変数を設定することで、Microsoft Entra 認証のいくつかの側面を構成することや、既定の動作をバイパスすることができます。 上記の変数に加えて、次の sqlcmd (Go) 固有の複数のメソッドに適用されます。
SQLCMDCLIENTID
この環境変数は、Azure SQL データベース に対する認証が許可されている、Microsoft Entra に登録されたアプリケーションの識別子に設定します。 適用対象は ActiveDirectoryInteractive
および ActiveDirectoryPassword
メソッドです。