MENU

EF Coreを使ったAzureのApp ServiceーAzure SQL Database間の接続で詰まった話

目次

EFCoreでSQL Serverに接続できない

最近、Azureの勉強がてら、WebAPIとDB(SQL Server)をAzureにデプロイしました。

ConnectionStringが空文字になっているエラー(ConnectionStringを修正)

026-10-03 00:38:41.020 +00:00 [Error] Microsoft.EntityFrameworkCore.Database.Connection: An error occurred using the connection to database '' on server ''.
2026-10-03 00:38:41.054 +00:00 [Error] Microsoft.EntityFrameworkCore.Update: An exception occurred in the database while saving changes for context type 

認証用トークンを取得できなかったことを指摘されるエラー(App ServiceでIDを作成(managed Identity))

2026-10-03 00:53:24.768 +00:00 [Error] Microsoft.EntityFrameworkCore.Update: An exception occurred in the database while saving changes for context type 'SampleApp.API.Models.SampleContext'.Microsoft.Data.SqlClient.SqlException (0x80131904): DefaultAzureCredential failed to retrieve a token from the included credentials.

DBにユーザーがないため、更新時に失敗したエラー(SQL ServerにUserを生成・権限付与)

2026-10-03 01:04:18.408 +00:00 [Error] Microsoft.EntityFrameworkCore.Update: An exception occurred in the database while saving changes for context type 'SampleApp.API.Models.SampleContext'.Microsoft.Data.SqlClient.SqlException (0x80131904): Login failed for user '<token-identified principal>'.at Microsoft.Data.SqlClient.SqlInternalConnection.

DBに詳しくないことから、何も考えずにデプロイして動かしたところ、案の定エラーが発生。Codexを使いつつでエラーは抑制し、無事WebAPI – DB間の通信に成功したのですが、このあたりは整理しておく必要があると思いました。

SQL Serverの認証方法

そもそもですが、SQL Serverには、Windows 認証モードとmixedモード(Windows認証+SQL Server認証)の2つの認証方法があります。(Microsoft, Choose an authentication mode, 確認日:2026/10/4)
これら2つに加え、Azure SQLでは、Microsoft EntraID(旧Active Directory)を用いて認証方法があります。

  • Windows 認証モード
    • OSから発行されたトークンを用いる
  • mixedモード(WIndows認証+SQL Server認証)
    • SQL Server認証の場合は、ユーザー名とパスワードを設定し、もいいる。
  • Microsoft Entra認証

私の場合は、ローカルで開発している際はWindows 認証だったのですが、それをデプロイ前に考慮できておらず、エラーが多発してしまった、という状態でした。そこで、軽く調査をしてみたところ、Microsoft Entra認証がお勧めとの記載が見つかりましたので、そちらを導入しました。

Microsoft Entra認証導入の手順

  • Connection Stringを修正
  • App ServiceでUserを作成(managed Identity)
  • SQL ServerにUserを生成・権限付与

1. Connection Stringを修正

Entra認証を使用することを明記します。

Authentication=Active Directory Default

Connection Stringをどこに書くかはいくつかあると思いますが、私の場合はひとまずApp Service内の環境変数に追加しました。

2. App ServiceでIDを作成(managed Identity)

App service上で、System assignedなIDを作成します。(Microsoft, Authenticate Azure-hosted .NET apps to Azure resources using a system-assigned managed identity, 確認日:2026/10/4)
SQL Serverに接続する際、こちらのIDを用いて認証が行われます。

3. SQL ServerにUserを生成・権限付与

ここまでで、アプリが認証用トークンを取得できる状態になると思うのですが、このUserにどこまでの権限を付与するのかを設定する必要があります。以下、読み取りと書き込み権限を付与するクエリです。Azure SQL Database上でクエリを叩きます。

CREATE USER [<app-service-name>] FROM EXTERNAL PROVIDER;

ALTER ROLE db_datareader ADD MEMBER [<app-service-name>];
ALTER ROLE db_datawriter ADD MEMBER [<app-service-name>];

ここまでできれば、Azure resource間での通信ができるはずです!!!

まとめ

  • AzureへDBとWeb APIをデプロイする中で、SQL Serverの認証やユーザー管理で躓いた
  • SQL Serverの認証方法はいくつかあり、Azureのリソース間ではMicrosoft Entraがお勧め
  • 以下を修正することで通信ができた
    • Connection Stringを修正
    • App ServiceでIDを作成
    • SQL ServerでUserを設定

手を動かすのも楽しいですが、やっぱり自分の言葉で整理すると理解が深まりますね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次