Microsoft Entra Server Principals and Server Roles for Azure SQL Databaseの管理者向け確認事項

Microsoft Entra Server Principals and Server Roles for Azure SQL Database は、Azure SQL DatabaseでMicrosoft Entra IDのユーザーやアプリケーションを「サーバー単位のログイン」として扱い、固定サーバーロールを割り当てられるようにする機能です。管理者がまず確認すべき結論は、SQL認証に頼っていたサーバー管理・監視・プロビジョニング作業を、Microsoft Entra IDベースへ寄せやすくなったという点です。

2026年6月19日の公式発表をもとにすると、本件はGA、つまり一般提供として扱うべき更新です。従来はMicrosoft Entra IDのプリンシパルをデータベース単位の包含ユーザーとして作る運用が中心で、サーバー横断の権限委任、ログイン管理、無効化、監視用DMV参照などに制約がありました。今回のGAにより、Azure SQL Databaseの管理者は「誰に、どのサーバーロールを、どの範囲で付与するか」を再設計する必要があります。Azure SQL Blogでも、Entraログインをlogical master database上のfirst-class server principalとして扱えること、固定サーバーロール付与、CREATE USER ... FROM LOGIN、ALTER LOGIN ... DISABLEによる集中管理が主な変更点として説明されています。(TECHCOMMUNITY.MICROSOFT.COM)

目次

Microsoft Entra Server Principals and Server Roles for Azure SQL Databaseで変わる管理ポイント

今回の変更で重要なのは、「Microsoft Entra IDでログインできるようになった」という単純な話ではありません。Azure SQL Databaseの論理サーバー上で、Microsoft Entra IDのユーザー、アプリケーション、サービスプリンシパルをサーバープリンシパル、つまりログインとして扱い、そのログインに対してサーバーレベルのロールを割り当てられる点が実務上の変化です。

Microsoft Learnでは、Microsoft Entra server principalsはAzure SQL Database、Azure SQL Managed Instance、SQL Server 2022以降で一般提供と説明されています。Azure Synapse Analyticsの専用SQLプールでは、現時点でパブリックプレビューとして扱われます。(Microsoft Learn)

従来の包含データベースユーザーだけの運用では、データベースごとにユーザーを作成し、必要な権限を個別に付与する必要がありました。複数データベースを持つ論理サーバーでは、監視担当者、DevOps用アプリ、セキュリティ担当者の権限管理が分散しやすく、退職・異動・インシデント対応時の無効化も漏れが出やすい構造でした。

今回のGAでは、次のような運用に変えられます。

変更点管理者にとっての意味実務での活用例
Microsoft Entraログインを作成できるEntra IDのIDをサーバー単位で扱える監視用サービスプリンシパルをサーバー単位で管理する
固定サーバーロールを割り当てられる管理者権限を渡さずに作業を委任できるDMV参照だけを許可する、ログイン管理だけを委任する
CREATE USER ... FROM LOGINを使えるデータベースユーザーをサーバーログインに紐づけられる複数DBで同じIDを一貫して管理する
ALTER LOGIN ... DISABLEで集中無効化できるオフボーディングや緊急遮断がしやすい退職者や漏えい疑いのアプリIDを即時停止する
Entra-only認証へ移行しやすくなるSQL認証依存を減らせるパスワードレス化、監査統制、認証基盤統一を進める

ただし、既存セッションへの反映、サーバーロールの伝播、グループ利用の制約、監査ログの見方には注意が必要です。ここを確認せずに本番導入すると、「権限を付けたのに効かない」「無効化したのに既存接続が残る」「SQL Auditに失敗ログインが出ない」といった誤解が起きます。

管理者向けチェックリスト

Azure管理者、DBA、セキュリティ担当者は、まず次の順番で確認すると抜け漏れを減らせます。

確認項目確認する内容判断基準
対象サーバーAzure SQL Databaseの論理サーバーでMicrosoft Entra管理者が設定済みか未設定ならEntra認証・Entraログイン運用の前提が整っていない
既存認証方式SQLログイン、Contained user、Entra認証の利用状況SQL認証依存が多いほど移行計画が必要
権限委任監視、DB作成、ログイン管理を誰が行うか管理者権限ではなく固定サーバーロールで委任できるか検討
監査SQL Audit、Log Analytics、Event Hubs、Storageの設定ロール変更・ログイン作成・認証イベントを追える状態にする
オフボーディングユーザー・アプリ無効化手順ALTER LOGIN ... DISABLEと既存セッション切断の手順を分ける
移行方針既存SQLログインをEntra IDへ置き換えるか重要度の低い監視・自動化IDから段階移行する
周知DBA、アプリ担当、SOC、ヘルプデスクへの説明「Azure RBACではDB接続権限にならない」点を必ず共有

特に誤解されやすいのがAzure RBACとの違いです。Microsoft Entra IDでAzureリソースを管理できるロールを持っていても、それだけでAzure SQL Databaseへ接続してクエリを実行できるわけではありません。Microsoft Learnでも、SQL Server ContributorやSQL DB Contributorは管理操作用であり、データベース接続権限ではないと説明されています。(Microsoft Learn)

権限設計で確認すべきサーバーロール

Azure SQL Databaseでは、固定サーバーロールを使って論理サーバー単位の権限を管理します。Microsoft Learnでは、Azure SQL Databaseに7つの固定サーバーロールが用意され、ロール自体の権限は変更できず、固定ロールを別の固定ロールのメンバーにはできないと説明されています。(Microsoft Learn)

管理者が見るべきポイントは、「便利だから付与する」ではなく、職務に合わせて最小権限で付与することです。

固定サーバーロール主な用途付与を検討する相手注意点
##MS_DatabaseConnector##すべてのデータベースへ接続可能にする共通接続が必要な運用ID接続許可の範囲が広いため、DB側のDENY設計も確認する
##MS_DatabaseManager##データベースの作成・削除DevOps、環境構築自動化アプリ作成したDBの所有者になり得るため、本番では承認フローが必要
##MS_DefinitionReader##定義情報の参照監査、構成管理、棚卸し担当セキュリティ定義も広く見えるため、情報開示リスクを確認する
##MS_LoginManager##ログインの作成・削除ID管理担当、セキュリティ管理者ログイン管理の委任範囲を台帳化する
##MS_SecurityDefinitionReader##セキュリティ定義の参照SOC、監査担当参照専用でも権限構造が見えるため、監査用途に絞る
##MS_ServerStateReader##DMVや状態情報の参照監視ツール、性能分析担当監視用途では最有力。管理権限を渡さず状態確認できる
##MS_ServerStateManager##サーバー状態の管理操作限定されたDBADBCC FREEPROCCACHEなど影響の大きい操作につながるため慎重に付与

たとえば、監視サービスプリンシパルにパフォーマンス監視用の参照権限を与えたいだけなら、いきなり管理者にするのではなく、##MS_ServerStateReader##を候補にします。ログイン作成だけを委任したい場合は、##MS_LoginManager##を使います。データベース作成をCI/CDで自動化する場合は、##MS_DatabaseManager##を検討します。

一方で、固定サーバーロールのメンバーは同じロールへ他のログインを追加できる点に注意が必要です。これは権限委任の連鎖につながるため、誰がどのロールを付与できるかを監査対象に含めるべきです。(Microsoft Learn)

Microsoft Entraログイン作成時の権限と前提条件

Microsoft Entraログインを作成・利用するには、仮想masterデータベースで操作します。最初のMicrosoft EntraログインはMicrosoft Entra管理者だけが作成できます。その後は、Microsoft Entra管理者またはloginmanager系の権限を持つプリンシパルがログイン作成を担う形になります。Microsoft Learnでも、Microsoft Entra管理者権限またはloginmanagerサーバーロールのメンバーシップが必要であり、最初のMicrosoft EntraログインはMicrosoft Entra管理者のみ作成できると説明されています。(Microsoft Learn)

基本的な作成例は次の通りです。

-- 仮想 master データベースで実行
CREATE LOGIN [app-monitor-prod] FROM EXTERNAL PROVIDER;
GO

データベース側にログインベースのユーザーを作る場合は、対象データベースで次のように実行します。

CREATE USER [app-monitor-prod] FROM LOGIN [app-monitor-prod];
GO

従来の包含ユーザーを作る構文も引き続き使えます。

CREATE USER [app-monitor-prod] FROM EXTERNAL PROVIDER;
GO

ただし、FROM LOGINで作成したユーザーと、FROM EXTERNAL PROVIDERで作成した包含ユーザーは意味が異なります。ログインベースのユーザーはサーバーログインに紐づき、サーバーレベルのロールや権限の影響を受けます。包含ユーザーはデータベース内に閉じたユーザーであり、同じ名前のログインが存在しても自動的に紐づくわけではありません。Microsoft Learnでも、ログインベースユーザーと包含データベースユーザーのSID構造の違い、同名プリンシパルによる混同リスクが説明されています。(Microsoft Learn)

既存環境の移行判断

すべての既存ユーザーをすぐにログインベースへ移行する必要はありません。移行対象は、サーバー横断で管理したいIDから優先するのが現実的です。

現在の状態移行優先度理由
監視ツールがSQLログインで接続している高パスワード管理を減らし、Entra ID・マネージドIDへ寄せやすい
CI/CDや運用アプリがDB作成・ログイン作成をしている高サーバーロールで最小権限化しやすい
複数DBに同じContained userを手作業で作っている中CREATE USER ... FROM LOGINで管理を集約できる
単一DBだけで完結する一般ユーザー低包含ユーザーのままでも管理上問題ない場合がある
一時的な外部ユーザー低〜中有効期限、ゲスト管理、監査要件に応じて判断する

移行時は、次の順で進めると安全です。

手順作業確認ポイント
1既存SQLログインとContained userを棚卸しする使用中のアプリ、接続文字列、権限、最終利用状況を確認
2対応するMicrosoft Entra IDを決めるユーザー、グループ、サービスプリンシパル、マネージドIDを整理
3仮想masterにEntraログインを作成する表示名重複がある場合はObject IDを確認
4必要な固定サーバーロールだけを付与する管理者権限を代替するのではなく、職務別に絞る
5対象DBにFROM LOGINでユーザーを作成する既存の同名Contained userと混在しないか確認
6接続テストを行う新規接続、ロール反映、アプリの認証方式を確認
7SQLログインを無効化または削除するロールバック手順を用意して段階的に実施
8Entra-only認証を検討するSQL認証を完全に止める前に依存アプリを洗い出す

Microsoft Entra-only authenticationを有効にすると、SQL Server管理者、SQLログイン、SQL認証ベースのユーザーなど、Microsoft Entra以外の認証方式は使えなくなります。これはセキュリティ強化に有効ですが、古い接続文字列、運用スクリプト、外部ツールがSQL認証に依存していると障害になります。(Microsoft Learn)

監査で見るべきポイント

Microsoft Entra Server Principals and Server Roles for Azure SQL Databaseを導入する場合、監査の焦点は「接続できたか」だけではありません。少なくとも次の操作を追跡できるようにします。

監査対象見るべき理由
CREATE LOGIN新しいサーバープリンシパルが作成されたことを把握する
ALTER LOGIN ... DISABLEアカウント停止・復旧の証跡を残す
ALTER SERVER ROLE ... ADD MEMBER権限昇格や委任の発生を確認する
CREATE USER ... FROM LOGINDBユーザーとサーバーログインの紐づけを把握する
認証成功・失敗不審な接続試行、移行後の接続失敗を検知する
DBCC FLUSHAUTHCACHEなど権限反映や緊急対応の操作証跡を残す

Azure SQL Databaseの監査は、データベースイベントをAzure Storage、Log Analytics workspace、Event Hubsへ書き出せます。コンプライアンス対応、データベース活動の把握、不審なアクティビティ分析に使えますが、高負荷時には可用性と性能を優先し、監査対象イベントのすべてが記録されない可能性がある点も明記されています。(Microsoft Learn)

特にMicrosoft Entra認証の失敗ログインは注意が必要です。Microsoft Learnでは、Microsoft Entra認証の失敗ログインはSQL audit logに表示されず、Microsoft Entra admin center側で確認する必要があると説明されています。成功ログインはデータベースに到達するため監査されますが、失敗時はデータベースに到達する前に認証が終わるためです。(Microsoft Learn)

棚卸しに使える確認SQL

サーバーロールのメンバーを確認するには、仮想masterデータベースでsys.server_role_membersとsys.server_principalsを使います。Microsoft Learnでも、Microsoft Entraログインがサーバーロールに含まれているか確認する例が示されています。(Microsoft Learn)

-- 仮想 master データベースで実行
SELECT
    member.principal_id AS MemberPrincipalID,
    member.name AS MemberPrincipalName,
    member.type_desc AS MemberType,
    roles.principal_id AS RolePrincipalID,
    roles.name AS RolePrincipalName
FROM sys.server_role_members AS srm
INNER JOIN sys.server_principals AS roles
    ON srm.role_principal_id = roles.principal_id
INNER JOIN sys.server_principals AS member
    ON srm.member_principal_id = member.principal_id
ORDER BY roles.name, member.name;

Microsoft Entraログインだけを確認したい場合は、type_descを見ます。

SELECT
    name,
    type,
    type_desc,
    is_disabled
FROM sys.server_principals
WHERE type_desc LIKE 'EXTERNAL%';

データベース側で、ログインベースユーザーか包含ユーザーかを確認したい場合は、SIDの形式を使って判別できます。

SELECT
    name,
    type_desc,
    CASE
        WHEN CONVERT(varchar(100), sid, 2) LIKE '%AADE'
             AND LEN(sid) = 18
        THEN 'login-based user'
        ELSE 'contained database user'
    END AS user_type
FROM sys.database_principals
WHERE type IN ('E', 'X');

権限反映とキャッシュの注意点

サーバーロールの変更は、すぐに既存セッションへ反映されるとは限りません。Microsoft Learnでは、ロール割り当てが有効になるまで最大5分かかる場合があり、既存セッションでは接続を閉じて再接続するまで変更が反映されないと説明されています。必要に応じてDBCC FLUSHAUTHCACHEを実行する回避策も示されています。(Microsoft Learn)

権限変更後に「付与したのに見えない」「外したのにまだ使える」と見える場合は、次を確認します。

症状主な原因対応
ロールを付与したのに権限が効かない既存接続のまま、またはキャッシュ反映待ち再接続し、必要に応じてキャッシュをクリア
無効化したのに処理が続くALTER LOGIN ... DISABLEは新規接続を止める操作既存セッションを特定し、必要ならKILLを検討
期待したDBで権限が効かないDB側に対応するユーザーがないCREATE USER ... FROM LOGINの有無を確認
グループ経由で意図通り動かないサーバーロール付与の制約やグループ解決の問題個別プリンシパルまたはサービスプリンシパル単位で検証
監査ログに失敗ログインが出ないEntra認証失敗はSQL Auditに出ない場合があるMicrosoft Entra admin centerのサインインログを確認

Microsoft Entraグループ利用時の注意点

Microsoft Entraグループは、アクセス管理を簡素化するうえで有効です。Microsoft Entra管理者をグループに設定すれば、グループメンバーが管理者として機能でき、サーバー側の個別変更を減らせます。Microsoft Learnでも、Microsoft Entra管理者は1つのIDとして設定され、グループを使うことで複数のIDに管理者権限を持たせやすいと説明されています。(Microsoft Learn)

ただし、固定サーバーロールの付与では制約があります。Microsoft Learnのチュートリアルでは、サーバーレベルロールはMicrosoft Entraグループにはサポートされないと記載されています。(Microsoft Learn)

そのため、実務では次のように使い分けると安全です。

用途推奨設計
Entra管理者を複数人で担うMicrosoft Entraグループを管理者に設定
監視アプリにDMV参照権限を付与サービスプリンシパルまたはマネージドIDへ必要ロールを直接付与
ログイン管理を委任個別の管理用IDに##MS_LoginManager##を付与し、変更を監査
一般利用者のDBアクセスDBロールとEntraグループを組み合わせて管理
本番サーバー管理グループ管理、PIM、承認フロー、監査ログを併用

「グループで全部まとめる」方針にすると、サーバーロールの制約にぶつかることがあります。管理者権限、DBアクセス権限、サーバーロール委任は同じ設計で扱わず、用途ごとに分けて考えるべきです。

導入前に周知すべきこと

今回のGAは、DBAだけで完結する変更ではありません。アプリ担当、ID管理担当、SOC、監査担当、ヘルプデスクにも影響します。

周知では、次の内容を短く共有すると効果的です。

対象者伝えるべき内容
アプリ担当接続方式をSQL認証からEntra認証、マネージドID、サービスプリンシパルへ移行できる可能性がある
DBAサーバーロールで権限委任できるが、付与先と反映タイミングに注意が必要
ID管理担当Entra IDのライフサイクル管理がDBアクセス停止にも直結しやすくなる
SOC・監査担当SQL AuditとEntraサインインログの両方を見る必要がある
ヘルプデスク「Azureの権限はあるがDBに入れない」は正常な切り分け観点である
開発・DevOpsCI/CD用IDをパスワードレス化し、必要最小限のサーバーロールへ置き換えられる

特に、SQL認証を廃止する計画がある場合は、いきなりEntra-only authenticationを有効化しないことが重要です。接続文字列、ジョブ、外部連携、監視ツール、緊急運用アカウントの依存関係を洗い出してから段階的に切り替えます。

本番導入の進め方

本番では、まず影響の小さい監視用途から始めるのが現実的です。たとえば、読み取り専用の監視サービスプリンシパルを作成し、##MS_ServerStateReader##を付与してDMV参照ができるか確認します。その後、ログイン管理、DB作成、CI/CD用途へ広げます。

おすすめの導入順は次の通りです。

フェーズ内容成功条件
検証開発環境でEntraログイン作成、ロール付与、監査確認作成・接続・無効化・監査が確認できる
監視ID移行監視用SQLログインをEntra IDへ移行SQLパスワードなしで監視が継続できる
自動化ID移行CI/CDやDB作成用IDをEntra化必要最小限のロールで処理が完了する
管理委任ログイン管理や定義参照を職務別に委任管理者権限を渡さず運用できる
SQL認証削減不要なSQLログインを無効化影響なくアプリ・運用が継続する
Entra-only検討SQL認証を完全に止めるか判断依存がなく、緊急時手順も整備済み

移行後は、少なくとも月次でサーバーロールメンバーを棚卸しします。特に##MS_DatabaseManager##、##MS_LoginManager##、##MS_ServerStateManager##は影響範囲が大きいため、付与理由、承認者、期限、最終利用状況を台帳化してください。

失敗しやすいポイント

Microsoft Entra Server Principals and Server Roles for Azure SQL Databaseは便利ですが、導入時に失敗しやすい箇所があります。

失敗例原因対策
SQLログインを消したらアプリが停止した接続文字列がSQL認証のままだった事前に接続元、接続方式、認証ライブラリを棚卸しする
Entraログインを作ったのにDBに入れないDBユーザーが未作成、または権限不足CREATE USER ... FROM LOGINとDBロールを確認
権限を外したのにまだ使える既存セッションが残っている再接続、キャッシュ、必要時のセッション切断を運用に含める
グループでサーバーロールをまとめようとして失敗サーバーロール付与の制約を見落としたロール付与対象を個別プリンシパルで検証する
SQL Auditだけ見て失敗ログインを見逃すEntra認証失敗はSQL Auditに出ない場合があるEntraサインインログも監視対象にする
管理者権限の代替として広く付与した最小権限設計になっていない職務別に固定サーバーロールを分ける

この機能は「管理を楽にする機能」であると同時に、「サーバー単位の権限をEntra IDへ広げる機能」でもあります。便利さだけを見て広く付与すると、権限委任の範囲が見えにくくなります。

管理者が次に取るべき行動

まず、Azure SQL Databaseの論理サーバーごとに、Microsoft Entra管理者の設定、SQLログインの利用状況、Contained userの棚卸し、固定サーバーロールの付与状況を確認してください。そのうえで、監視用ID、CI/CD用ID、ログイン管理担当の3種類から優先的にMicrosoft Entraログイン化を検討します。

本番導入では、次の3点を完了条件にすると安全です。

完了条件内容
権限設計が文書化されているどのロールを誰に付与するか、なぜ必要かが説明できる
監査できるログイン作成、ロール変更、無効化、認証イベントを追える
戻せるSQL認証削減やEntra-only化の前にロールバック手順がある

Microsoft Entra Server Principals and Server Roles for Azure SQL DatabaseのGAは、Azure SQL Databaseの認証・権限管理をEntra ID中心に整理する好機です。いきなり全面移行するのではなく、監視、管理委任、自動化、SQL認証削減の順に進めることで、実運用のリスクを抑えながらパスワードレス化と最小権限化を進められます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次