チュートリアル: Microsoft Entra サーバー ログインの作成と使用
適用対象:Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (専用 SQL プールのみ)
この記事では、Azure SQL の仮想 データベースで Microsoft Entra ID (旧称 Azure Active Directory) のmaster
を作成および利用する方法について説明します。
このチュートリアルでは、次の作業を行う方法について説明します。
- 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 ログインを作成します。 この例では、
bob@contoso.com
という名前の Microsoft Entra ドメインに存在するcontoso
を使用します。 ログインは、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 にログインします。
[データベース]>[システム データベース]を展開します。
master
データベースを右クリックし、「新しいクエリ」 を選択して、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
データベースはまだ使用されていますが、他のデータベースにユーザーを作成する場合は、任意のデータベースに再接続できます。 次のクエリを実行します。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 ログインにサーバー レベルのロールを付与する
master
データベース内の ##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
を割り当てることができます。
特別なデータベース ロールの 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 レプリカで読み取り専用を許可し、プライマリ サーバーでの接続を拒否します。