sqlcmd で Microsoft Entra ID を使用して認証する

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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_IDAZURE_CLIENT_ID の設定は、DefaultAzureCredential が環境構成のチェックを開始し、認証のために次に示すその他の環境変数のいずれかを探すために必要です。
    • 環境変数 AZURE_CLIENT_SECRET を設定すると、DefaultAzureCredentialClientSecretCredential を選択するように構成されます。
    • 環境変数 AZURE_CLIENT_CERTIFICATE_PATH を設定すると、AZURE_CLIENT_SECRET が設定されていない場合に ClientCertificateCredential を選択するように DefaultAzureCredential が構成されます。
  • 環境変数 AZURE_USERNAME を設定すると、AZURE_CLIENT_SECRETAZURE_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 メソッドです。