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

適用対象:Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (専用 SQL プールのみ)

この記事では、Azure SQL の仮想 master データベース内で、Microsoft Entra ID(旧称 Azure Active Directory)を使用する ログイン を作成して利用する方法について説明します。

このチュートリアルでは、次の作業を行う方法について説明します。

  • Azure SQL Database の新しい構文拡張子を使用して、仮想 master データベースに新しい Microsoft Entra ログインを作成する
  • 仮想 master データベースに Microsoft Entra ログインにマップされたユーザーを作成する
  • 一意でない表示名に WITH OBJECT_ID 構文を使用する
  • Microsoft Entra ユーザーにサーバー ロールを付与する
  • 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 ID (特にサービス プリンシパルの場合) で一意でない表示名を扱う組織の場合は、ログインを作成する予定のサービス プリンシパルでオブジェクト ID 情報を使用できることを確認してください。 WITH OBJECT_ID構文拡張機能は、これらのシナリオの解決に役立ちます。

Microsoft Entra ログインを作成する

  1. Microsoft Entra アカウントの Azure SQL Database ログインを作成します。 この例では、bob@contoso.com という名前の Microsoft Entra ドメインに存在する contoso を使用します。 ログインは、Microsoft Entra グループまたは サービス プリンシパル (アプリケーション) からも作成できます。 たとえば、mygroup は Microsoft Entra グループで、そのグループのメンバーである Microsoft Entra アカウントで構成されています。 詳細については、「ログインを作成する (Transact-SQL)」を参照してください。

    注

    最初の Microsoft Entra ログインは、Microsoft Entra 管理者が作成する必要があります。Microsoft Entra 管理者は、Microsoft Entra ユーザーまたはグループに設定できます。 SQL ログインでは、Microsoft Entra ログインを作成できません。

    ヒント

    Microsoft Entra ID で一意でない表示名に関する問題が発生した場合は、 WITH OBJECT_ID 構文拡張を使用できます。 この機能は、表示名が重複するサービス プリンシパルに特に役立ちます。 例えば次が挙げられます。

    CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
      WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'
    

    詳細については、 Microsoft Entra ログインと一般表示名を持つユーザーを参照してください。

  2. SQL Server Management Studio (SSMS) を使用して、サーバー用に設定した Microsoft Entra 管理者アカウントで SQL Database にログインします。

  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 ユーザーを作成できます。 引き続きこの例の bob@contoso.com を使って、仮想 master データベースにユーザーを作成し、ユーザーを特別なロールに追加する方法を示します。 仮想 master データベースにユーザーを作成できるのは、Microsoft Entra 管理者または SQL Server 管理者のみです。

  2. 仮想 master データベースはまだ使用されていますが、他のデータベースにユーザーを作成する場合は、任意のデータベースに再接続できます。 次のクエリを実行します。

    CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
    

    ヒント

    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 ログインと一意ではない表示名を持つユーザー」を参照してください

Microsoft Entra ログインにサーバー レベルのロールを付与する

固定サーバーレベル ロール (たとえば、master データベースの ##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;

Microsoft Entra ユーザーに特別なロールを付与する

SQL Database の特別なロールは、仮想 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 ロールを指定しましょう。

  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
    

省略可能 - ログインを無効にする

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 レプリカで読み取り専用を許可し、プライマリ サーバーでの接続を拒否します。