Microsoft Entra サーバー プリンシパル
適用対象: Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (専用 SQL プールのみ)
SQL データベースの仮想master
データベースでのログインである Microsoft Entra ID (旧称 Azure Active Directory) でサーバー プリンシパルを作成して利用できるようになりました。 SQL Database に Microsoft Entra サーバー プリンシパルを使用すると、複数の利点があります。
- アクセス許可の管理のための Azure SQL Database サーバー ロールをサポートします。
loginmanager
やdbmanager
ロールといった SQL Database のための特別なロールを持つ複数の Microsoft Entra ユーザーをサポートします。- SQL ログインと Microsoft Entra ログインの間の機能パリティ。
- Microsoft Entra のみの認証の活用など、機能改善サポートを強化します。 Microsoft Entra のみの認証を使用すると SQL 認証を無効にすることができます。これには、SQL Server 管理者、SQL ログイン、ユーザーが含まれます。
- Microsoft Entra プリンシパルにより geo レプリカのサポートが有効になります。 Microsoft Entra プリンシパルは、プライマリ サーバーに対する読み取り専用アクセス許可と拒否アクセス許可を使用して、ユーザー データベースの geo レプリカに接続できます。
- 特別なロールを持つ Microsoft Entra サービスプリンシパル ログインを使用して、Microsoft Entra アプリケーションによるユーザーとデータベースの作成およびメンテナンスを完全に自動化できます。
Azure SQL における Microsoft Entra の認証に関する詳細は、「Microsoft Entra 認証を使用する」を参照してください。
Note
Microsoft Entra サーバー プリンシパル (ログイン) は、現在、Azure SQL データベースおよび Azure Synapse Analytics でパブリック プレビュー段階です。 Microsoft Entra ログインは、Azure SQL Managed Instance および SQL Server 2022 で一般提供されています。
アクセス許可
仮想 master
データベースで Microsoft Entra のログインを使用または作成するには、次のアクセス許可が必要です。
loginmanager
サーバー ロールの Microsoft Entra 管理者権限またはメンバーシップ。 最初の Microsoft Entra ログインは、Microsoft Entra 管理者のみが作成できます。- Azure SQL データベースで使用されるのと同じディレクトリ内の Microsoft Entra ID のメンバーである必要があります。
既定で、master
データベースで新しく作成された Microsoft Entra ログインに付与される標準のアクセス許可は、VIEW ANY DATABASE です。
Microsoft Entra プリンシパル構文
Microsoft Entra サーバーおよびデータベース プリンシパルを作成および管理するには、次の構文を使用します。
ログインを作成する
この構文では、Microsoft Entra ID に基づいてサーバー レベルのログインが作成されます。 仮想 master
データベースでこのコマンドを実行できるのは、Microsoft Entra 管理者のみです。
CREATE LOGIN login_name
{
FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid']
| WITH <option_list> [,..]
}
<option_list> ::=
PASSWORD = { 'password' }
[ , SID = sid ]
login_name では、Microsoft Entra プリンシパル (Microsoft Entra のユーザー、グループ、またはアプリケーション) を指定します。
詳細については、「CREATE LOGIN (Transact-SQL)」を参照してください。
ログインからユーザーを作成する
次の T-SQL 構文では、仮想 master
データベースの Microsoft Entra ログインにマップされたデータベース レベルの Microsoft Entra プリンシパルが作成されます。 Microsoft Entra ユーザーを含むデータベースを作成する構文と似ていますが、唯一の違いは、FROM EXTERNAL PROVIDER
ではなく FROM LOGIN [login_name]
を指定することです。
Microsoft Entra ログインから Microsoft Entra ユーザーを作成するには、次の構文を使用します。
CREATE USER [user_name] FROM LOGIN [login_name]
sys.database_principals の SID
列を使用して、Microsoft Entra 包含データベース ユーザーとログインから作成された Microsoft Entra ユーザーを区別できます。 包含データベース ユーザーの場合、SID
は長さ 16 の binary 文字列です。 ログイン ベースのユーザーの場合、SID
は長さ 18 で AADE
サフィックス付きの binary 文字列です。
Note
SID に AADE
サフィックスを追加することで、Microsoft Entra ユーザーがログインから作成されたことを識別します。 ただし、これは、ログインとそのユーザーの SID が sys.server_principals
と sys.database_principals
の間で一致しないことも意味します。 ユーザーをログインに関連付けるためには、最初に AADE
サフィックスを削除する必要があります。
ログイン ベースのユーザーと包含データベース ユーザーの概念上の違いを理解するには、「包含データベース ユーザー」を参照してください。
すべてのユーザー作成構文の詳細については、「CREATE USER (Transact-SQL)」を参照してください。
ALTER LOGIN を使用してログインを無効または有効にする
ALTER LOGIN (Transact-SQL) DDL 構文を使用して、Azure SQL データベースで Microsoft Entra ログインを有効または無効にすることができます。
ALTER LOGIN [login_name] DISABLE
ログインを無効にすると、そのサーバー プリンシパルを使用した接続は許可されなくなります。 また、そのログインから作成されたすべてのデータベース プリンシパル (ユーザー) はそれぞれのデータベースに接続できなくなります。
Note
ALTER LOGIN login_name DISABLE
は、ログインに関連付けられていないため、包含データベース ユーザーには影響しません。ALTER LOGIN login_name DISABLE
は、Microsoft Entra グループではサポートされていません。個々の無効なログインは、
master
データベースに作成されたログイン グループ (たとえば、Microsoft Entra の管理者グループ) の一部であるユーザーに属することはできません。DISABLE
またはENABLE
の変更をすぐに有効にするには、T-SQL コマンドを使用して、認証キャッシュと TokenAndPermUserStore キャッシュをクリアする必要があります。DBCC FLUSHAUTHCACHE DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS
Microsoft Entra プリンシパルのロール
SQL Database の特別なロールは、dbmanager と loginmanager を含む Microsoft Entra プリンシパルの仮想 master
データベース内の "ユーザー" に割り当てることができます。
Azure SQL Database サーバー ロールは、仮想 master
データベース内の "ログイン" に割り当てることができます。
これらのロールを許可する方法のチュートリアルについては、「チュートリアル: Microsoft Entra サーバー ログインの作成と使用」を参照してください。
制限事項と注釈
- SQL サーバー管理者は、Microsoft Entra ログインまたはユーザーをどのデータベースにも作成できません。
- SQL 管理者または SQL ユーザーは、以下の Microsoft Entra 操作を実行できません:
CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER
EXECUTE AS USER [bob@contoso.com]
ALTER AUTHORIZATION ON securable::name TO [bob@contoso.com]
- Azure SQL Database と Azure Synapse Analytics では、Microsoft Entra サーバー プリンシパル (ログイン) の偽装はサポートされていません。 SQL Managed Instance ではサポートされています。
- EXECUTE AS 句 (Transact-SQL)
- EXECUTE AS (Transact-SQL)
- ユーザー データベースでの Microsoft Entra データベース プリンシパル (ユーザー) の偽装は、すべての Microsoft SQL 製品でサポートされています。
- Microsoft Entra ログインは Microsoft Entra 管理者と重複できません。 Microsoft Entra 管理者は、他のあらゆるログインよりも優先されます。 Microsoft Entra アカウントが、Microsoft Entra 管理者として、個別または管理者グループのメンバーとしてサーバーに既にアクセスしている場合、このアカウント用に作成されたログインには何も影響しません。 ただし、ログインの作成は、T-SQL によってブロックされません。 アカウントがサーバーに対して認証されると、新しく作成されたログインではなく、そのログインに、Microsoft Entra 管理者の有効なアクセス許可が付与されます。
- 特定の Microsoft Entra ログイン オブジェクトの権限変更はサポートされていません:
GRANT <PERMISSION> ON LOGIN :: <Microsoft Entra account> TO <Any other login>
- Microsoft Entra ログインのアクセス許可を変更すると、既定では、そのログインが Azure SQL データベースに次回接続したときにのみ変更が有効になります。 ログインで開いている既存の接続は影響を受けません。 アクセス許可の変更を直ちに有効にするために、「ALTER LOGIN を使用してログインを無効にするか有効にする」で前述したように、認証と TokenAndPermUserStore を手動でクリアすることができます。 この動作は、ALTER Standard Edition RVER ROLE を使用してサーバー ロール メンバーシップを変更する場合にも適用されます。
- SQL Server Management Studio と Azure Data Studio では、ユーザーを作成するスクリプト コマンドは
master
に同じ名前の Microsoft Entra ログインが存在するかどうかをチェックしません。 包含データベース Microsoft Entra ユーザーの T-SQL が常に生成されます。 - 一意ではない表示名を使用してサービス プリンシパルからログインまたはユーザーを作成しようとすると、エラーが発生する可能性があります。 このエラーを回避する方法の詳細については、「Microsoft Entra ログインと一意ではない表示名を持つユーザー」を参照してください。
Microsoft Entra グループ サーバー プリンシパルの制限事項
Azure SQL Database および Azure Synapse Analytics でパブリック プレビュー段階にある Microsoft Entra ログインに関して、以下の既知の制限事項があります。
- Azure SQL Database サーバー ロールは、Microsoft Entra グループではサポートされません。
- SQL 管理者が Microsoft Entra グループの場合、そのグループのユーザーが接続する際にいくつかの制限があります。 各 Microsoft Entra ユーザーはそれぞれ、
sys.server_principals
テーブルに属していません。 これにより、SUSER_SID
への呼び出しがNULL
を返すなど、さまざまな結果が生じます。 - Microsoft Entra グループ ログインの一部である Microsoft Entra ユーザー ログインも暗黙的に作成されません。つまり、既定のスキーマがないため、Microsoft Entra ユーザーのログインが作成されるか、既定のスキーマがグループに割り当てられるまで、
CREATE SCHEMA
などの操作を実行できません。 - データベースの所有権を Microsoft Entra グループデータベースの所有者として変更することはサポートされていません。
ALTER AUTHORIZATION ON database::<mydb> TO [my_aad_group]
はエラーメッセージで失敗します。Msg 33181, Level 16, State 1, Line 4 The new owner cannot be Azure Active Directory group.