チュートリアル: Microsoft Entra サーバー ログインの作成と使用
適用対象: Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics (専用 SQL プールのみ)
この記事では、Azure SQL の仮想 master
データベースで Microsoft Entra ID (旧称 Azure Active Directory) のログインを作成および利用する方法について説明します。
このチュートリアルでは、次の作業を行う方法について説明します。
- Azure SQL Database の新しい構文拡張子を使用して、仮想
master
データベースに新しい Microsoft Entra ログインを作成する - 仮想
master
データベースに Microsoft Entra ログインにマップされたユーザーを作成する - Microsoft Entra ユーザーにサーバー ロールを付与する
- Microsoft Entra ログインを無効にする
Note
Microsoft Entra サーバー プリンシパル (ログイン) は、現在、Azure SQL Database でパブリック プレビュー段階です。 Azure SQL Managed Instance は、すでに Microsoft Entra のログインを利用できます。
前提条件
- データベースを含む SQL Database または SQL Managed Instance。 「クイック スタート:Azure SQL Database の単一データベースを作成する」(Azure SQL Database をまだ作成していない場合) または「クイック スタート:Azure SQL マネージド インスタンスの作成」を参照してください。
- SQL Database またはSQL Managed Instance に対する Microsoft Entra 認証の構成です。 詳細については、Azure SQL による Microsoft Entra 認証の構成と管理を参照してください。
- この記事では、仮想
master
データベース内で Microsoft Entra ログインとユーザーを作成する方法について説明します。 仮想master
データベース内にユーザーを作成できるのは Microsoft Entra 管理者のみであるため、このチュートリアルを実行するときは Microsoft Entra 管理者アカウントを使うことをお勧めします。loginmanager
ロールを持つ Microsoft Entra プリンシパルはログインを作成できますが、仮想master
データベースにユーザーを作成することはできません。
Microsoft Entra ログインを作成する
Microsoft Entra アカウントの Azure SQL Database ログインを作成します。 この例では、
contoso
という名前の Microsoft Entra ドメインに存在するbob@contoso.com
を使用します。 ログインは、Microsoft Entra グループまたは サービス プリンシパル (アプリケーション) からも作成できます。 たとえば、mygroup
は Microsoft Entra グループで、そのグループのメンバーである Microsoft Entra アカウントで構成されています。 詳細については、「ログインを作成する (Transact-SQL)」を参照してください。Note
最初の Microsoft Entra ログインは、Microsoft Entra 管理者が作成する必要があります。Microsoft Entra 管理者は、Microsoft Entra ユーザーまたはグループに設定できます。 SQL ログインでは、Microsoft Entra ログインを作成できません。
SQL Server Management Studio (SSMS) を使用して、サーバー用に設定した Microsoft Entra 管理者アカウントで SQL Database にログインします。
次のクエリを実行します。
Use master CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER GO
sys.server_principals
で作成されたログインを確認します。 次のクエリを実行します。SELECT name, type_desc, type, is_disabled FROM sys.server_principals WHERE type_desc like 'external%'
出力は以下のようになります。
Name type_desc type is_disabled bob@contoso.com EXTERNAL_LOGIN E 0
ログイン
bob@contoso.com
が、仮想master
データベースに作成されています。
Microsoft Entra ログインでユーザーを作成する
Microsoft Entra ログインを作成したので、仮想
master
データベースの Microsoft Entra ログインにマップされるデータベース レベルの Microsoft Entra ユーザーを作成できます。 引き続きこの例のbob@contoso.com
を使って、仮想master
データベースにユーザーを作成し、ユーザーを特別なロールに追加する方法を示します。 仮想master
データベースにユーザーを作成できるのは、Microsoft Entra 管理者または SQL Server 管理者のみです。ここでは仮想
master
データベースを使っていますが、他のデータベースにユーザーを作成する場合は、希望するデータベースに切り替えることができます。 次のクエリを実行します。Use master CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
ヒント
Microsoft Entra ユーザーの別名 (例:
bob@contoso.com
) を使用する必要はありませんが、Microsoft Entra ユーザーと Microsoft Entra ログインに対するものと同じ別名を使用することがベスト プラクティスとなります。sys.database_principals
で作成されたユーザーを確認します。 次のクエリを実行します。SELECT name, type_desc, type FROM sys.database_principals WHERE type_desc like 'external%'
出力は以下のようになります。
Name type_desc type bob@contoso.com EXTERNAL_USER E
Note
Microsoft Entra ログインなしで Microsoft Entra ユーザーを作成するための既存の構文は引き続きサポートされています。 次の構文を実行すると、接続先の特定のデータベース内にデータベースに含まれるユーザーが作成されます。 重要なのは、同じ名前のログインが仮想 master
データベースに存在する場合でも、このユーザーはどのログインにも関連付けられていない点です。
たとえば、CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER
のようにします。
一般表示名を持つサービス プリンシパルを使用して、Microsoft Entra ログインを作成できます。 詳細については、「Microsoft Entra ログインと一意ではない表示名を持つユーザー」を参照してください
Microsoft Entra ログインにサーバー レベルのロールを付与する
##MS_DefinitionReader##、##MS_ServerStateReader##、##MS_ServerStateManager## ロールなど、固定のサーバー レベルのロールにログインを追加できます。
Note
ここで説明するサーバー レベルのロールは、Microsoft Entra グループでサポートされていません。
ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateManager## ADD MEMBER [AzureAD_object];
アクセス許可は、ユーザーが再接続するまで有効になりません。 DBCC キャッシュもフラッシュします。
DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS
サーバー レベルのロールに属する Microsoft Entra ログインを確認するには、次のクエリを実行します。
SELECT roles.principal_id AS RolePID,roles.name AS RolePName,
server_role_members.member_principal_id AS MemberPID, members.name AS MemberPName
FROM sys.server_role_members AS server_role_members
INNER JOIN sys.server_principals AS roles
ON server_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.server_principals AS members
ON server_role_members.member_principal_id = members.principal_id;
Microsoft Entra ユーザーに特別なロールを付与する
仮想 master
データベースのユーザーに、SQL Database の特別なロールを割り当てることができます。
特別なデータベース ロールの 1 つをユーザーに許可するためには、ユーザーが仮想 master
データベースに存在している必要があります。
ロールにユーザーを追加するには、次のクエリを実行します。
ALTER ROLE [dbmanager] ADD MEMBER [AzureAD_object]
ロールからユーザーを削除するには、次のクエリを実行します。
ALTER ROLE [dbmanager] DROP MEMBER [AzureAD_object]
AzureAD_object
には、Microsoft Entra ID の Microsoft Entra ユーザー、グループ、またはサービス プリンシパルを指定できます。
この例では、ユーザー bob@contoso.com
を作成しました。 ユーザーに dbmanager ロールと loginmanager ロールを指定しましょう。
次のクエリを実行します。
ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com] ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
次のクエリを実行して、データベース ロールの割り当てを確認します。
SELECT DP1.name AS DatabaseRoleName, isnull (DP2.name, 'No members') AS DatabaseUserName FROM sys.database_role_members AS DRM RIGHT OUTER JOIN sys.database_principals AS DP1 ON DRM.role_principal_id = DP1.principal_id LEFT OUTER JOIN sys.database_principals AS DP2 ON DRM.member_principal_id = DP2.principal_id WHERE DP1.type = 'R'and DP2.name like 'bob%'
出力は以下のようになります。
DatabaseRoleName DatabaseUserName dbmanager bob@contoso.com loginmanager bob@contoso.com
省略可能 - ログインを無効にする
ALTER LOGIN (Transact-SQL) DDL 構文を使用して、Azure SQL Database で Microsoft Entra ログインを有効または無効にすることができます。
ALTER LOGIN [bob@contoso.com] DISABLE
DISABLE
または ENABLE
の変更をすぐに有効にするには、次の T-SQL コマンドを使用して、認証キャッシュと TokenAndPermUserStore キャッシュをクリアする必要があります。
DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS
次のクエリを実行して、ログインが無効になっているか確認します。
SELECT name, type_desc, type
FROM sys.server_principals
WHERE is_disabled = 1
これを使用する場合は、 geo レプリカで読み取り専用を許可し、プライマリ サーバーでの接続を拒否します。