この記事では、Azure Synapse Analytics専用SQLプール(旧SQL DW)の仮想データベース内で、Microsoft Entra ID(旧Azure Active Directory)によるmasterの作成と利用方法を案内します。 Azure Synapse Analyticsのワークスペースにある専用SQLプールは論理SQL Serverを使用しません。
注記
Microsoft Entra server principals は現在 Azure Synapse Analytics のプレビュー中です。
このチュートリアルでは、以下の内容を学習します。
- バーチャル
masterデータベースでMicrosoft Entraログインを作成しましょう - 仮想
masterデータベースに Microsoft Entra ログインにマップされたユーザーを作成する - 一意でない表示名に
WITH OBJECT_ID構文を使用する - Microsoft Entra ユーザーにサーバー ロールを付与する
- Microsoft Entra ログインを無効にする
Prerequisites
- Azure Synapse Analytics専用のSQLプールとデータベースです。
- Azure Synapse Analytics 用に Microsoft Entra 認証が構成されています。 詳細については、「Azure Synapse AnalyticsによるMicrosoft Entra認証の構成および管理」をご覧ください。
- この記事では、仮想
masterデータベース内で Microsoft Entra ログインとユーザーを作成する方法について説明します。 仮想masterデータベース内にユーザーを作成できるのは Microsoft Entra 管理者のみであるため、このチュートリアルを実行するときは Microsoft Entra 管理者アカウントを使うことをお勧めします。loginmanagerロールを持つ Microsoft Entra プリンシパルはログインを作成できますが、仮想masterデータベースにユーザーを作成することはできません。
注記
Microsoft Entra ID (特にサービス プリンシパルの場合) で一意でない表示名を扱う組織の場合は、ログインを作成する予定のサービス プリンシパルでオブジェクト ID 情報を使用できることを確認してください。
WITH OBJECT_ID構文拡張機能は、これらのシナリオの解決に役立ちます。
Microsoft Entra ログインを作成する
Microsoft Entraアカウントのサインイン情報を作成してください。 この例では、
bob@contoso.comと呼ばれるMicrosoft Entraドメインに存在するcontosoを用います。 また、Microsoft Entraグループやサービスプリンシパル(アプリケーション)からログインを作成することも可能です。 詳細については、「CREATE LOGIN (Transact-SQL)」を参照してください。注記
最初の Microsoft Entra ログインは、Microsoft Entra 管理者が作成する必要があります。Microsoft Entra 管理者は、Microsoft Entra ユーザーまたはグループに設定できます。 SQL認証ログインではMicrosoft Entraのログインは作成できません。
Tip
Microsoft Entra IDで重複する表示名に関する問題が発生した場合は、
WITH OBJECT_IDの構文拡張を使ってください。 この機能は、表示名が重複するサービス プリンシパルに特に役立ちます。 例えば次が挙げられます。CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'詳細については「 名称に関する事項」を参照してください。
SQL Server Management Studio(SSMS)を使い、Microsoft Entra管理者アカウントで専用のSQLプールにサインインしてください。
[データベース]>[システム データベース]を展開します。
masterデータベースを右クリックし、[新しいクエリ] を選択して、masterデータベースのコンテキストで新しいクエリ ウィンドウを開きます。次のクエリを実行します。
CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER GOsys.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ユーザーを作成します。 ユーザーを特別なロールに追加する方法を示すために、仮想masterデータベースにユーザーを作成する例bob@contoso.comを使います。 仮想masterデータベースにユーザーを作成できるのは、Microsoft Entra 管理者または SQL Server 管理者のみです。バーチャル
masterデータベースを使いましょうが、他のデータベースでユーザーを作成したい場合は、お好きなデータベースに再接続できます。 次のクエリを実行します。CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]Tip
Microsoft Entra ユーザー エイリアス (たとえば、
bob@contoso.com) を使用する必要はありませんが、Microsoft Entra ユーザーと Microsoft Entra ログインに同じエイリアスを使用することをお勧めします。特定のオブジェクトIDを持つ外部プロバイダーから直接ユーザーを作成する必要がある場合(例えば、非一意の表示名の問題を解決するため)、以下の構文を用いてください。
CREATE USER [user_name] FROM EXTERNAL PROVIDER WITH OBJECT_ID = 'objectid'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 ログインにサーバー レベルのロールを付与する
データベース内の固定サーバーレベル ロール (master、##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;
Microsoft Entra ユーザーに特別なロールを付与する
仮想データベース内のユーザーにmasterを割り当てることができます。
特別なデータベースロールのいずれかをユーザーに付与するには、そのユーザーが仮想 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
省略可能 - ログインを無効にする
専用SQLプールでMicrosoft Entraログインを有効または無効にするために、ALTER LOGIN (Transact-SQL) DDL構文を使用します。
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