events
3月31日 23時 - 4月2日 23時
究極の SQL、Power BI、Fabric、AI コミュニティ主導のイベント。 3 月 31 日から 4 月 2 日。 コード MSCUST を使用して 150 ドルの割引。 価格は2月11日に上昇します。
今すぐ登録このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
適用対象: Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics (専用 SQL プールのみ)
この記事では、Azure SQL の仮想 master
データベースで Microsoft Entra ID (旧称 Azure Active Directory) のログインを作成および利用する方法について説明します。
このチュートリアルでは、次の作業を行う方法について説明します。
master
データベースに新しい Microsoft Entra ログインを作成するmaster
データベースに Microsoft Entra ログインにマップされたユーザーを作成する注意
Microsoft Entra サーバー プリンシパル (ログイン) は、現在、Azure SQL Database でパブリック プレビュー段階です。 Azure SQL Managed Instance は、すでに Microsoft Entra のログインを利用できます。
master
データベース内で Microsoft Entra ログインとユーザーを作成する方法について説明します。 仮想 master
データベース内にユーザーを作成できるのは Microsoft Entra 管理者のみであるため、このチュートリアルを実行するときは Microsoft Entra 管理者アカウントを使うことをお勧めします。 loginmanager
ロールを持つ Microsoft Entra プリンシパルはログインを作成できますが、仮想 master
データベースにユーザーを作成することはできません。Microsoft Entra アカウントの Azure SQL Database ログインを作成します。 この例では、contoso
という名前の Microsoft Entra ドメインに存在する bob@contoso.com
を使用します。 ログインは、Microsoft Entra グループまたは サービス プリンシパル (アプリケーション) からも作成できます。 たとえば、mygroup
は Microsoft Entra グループで、そのグループのメンバーである Microsoft Entra アカウントで構成されています。 詳細については、「ログインを作成する (Transact-SQL)」を参照してください。
注意
最初の 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 ログインを作成したので、仮想 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
注意
Microsoft Entra ログインなしで Microsoft Entra ユーザーを作成するための既存の構文は引き続きサポートされています。 次の構文を実行すると、接続先の特定のデータベース内にデータベースに含まれるユーザーが作成されます。 重要なのは、同じ名前のログインが仮想 master
データベースに存在する場合でも、このユーザーはどのログインにも関連付けられていない点です。
たとえば、CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER
のようにします。
一般表示名を持つサービス プリンシパルを使用して、Microsoft Entra ログインを作成できます。 詳細については、「Microsoft Entra ログインと一意ではない表示名を持つユーザー」を参照してください
##MS_DefinitionReader##、##MS_ServerStateReader##、##MS_ServerStateManager## ロールなど、固定のサーバー レベルのロールにログインを追加できます。
注意
ここで説明するサーバー レベルのロールは、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;
仮想 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 レプリカで読み取り専用を許可し、プライマリ サーバーでの接続を拒否します。
events
3月31日 23時 - 4月2日 23時
究極の SQL、Power BI、Fabric、AI コミュニティ主導のイベント。 3 月 31 日から 4 月 2 日。 コード MSCUST を使用して 150 ドルの割引。 価格は2月11日に上昇します。
今すぐ登録