チュートリアル:Microsoft Entraサーバーログインの作成と使用

この記事では、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 ログインを作成する

  1. 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'
    

    詳細については「 名称に関する事項」を参照してください。

  2. SQL Server Management Studio(SSMS)を使い、Microsoft Entra管理者アカウントで専用のSQLプールにサインインしてください。

  3. [データベース]>[システム データベース]を展開します。 master データベースを右クリックし、[新しいクエリ] を選択して、master データベースのコンテキストで新しいクエリ ウィンドウを開きます。

  4. 次のクエリを実行します。

    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  5. 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
    
  6. ログイン bob@contoso.com は仮想 master データベース内に作成されます。

Microsoft Entra ログインでユーザーを作成する

  1. Microsoft Entraログインを作成した後、仮想masterデータベース内のMicrosoft Entraログインにマッピングするデータベース レベルのMicrosoft Entraユーザーを作成します。 ユーザーを特別なロールに追加する方法を示すために、仮想 master データベースにユーザーを作成する例 bob@contoso.com を使います。 仮想 master データベースにユーザーを作成できるのは、Microsoft Entra 管理者または SQL Server 管理者のみです。

  2. バーチャル 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'
    
  3. 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の役割をユーザーに割り当てます。

  1. 次のクエリを実行します。

    ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com]
    ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
    
  2. 次のクエリを実行して、データベース ロールの割り当てを確認します。

    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