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

適用対象:Azure SQL データベースAzure SQL Managed InstanceAzure Synapse Analytics (サーバーレス SQL プールのみ)

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

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

  • 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 または Managed Instance に対する Microsoft Entra 認証の構成です。 詳細については、Azure SQL による Microsoft Entra 認証の構成と管理を参照してください。
  • この記事では、仮想 master データベース内で Microsoft Entra ログインとユーザーを作成する方法について説明します。 仮想 master データベース内にユーザーを作成できるのは Microsoft Entra 管理者のみであるため、このチュートリアルを実行するときは Microsoft Entra 管理者アカウントを使うことをお勧めします。 loginmanager ロールを持つ Microsoft Entra プリンシパルはログインを作成できますが、仮想 master データベースにユーザーを作成することはできません。

Microsoft Entra ログインを作成する

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

    Note

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

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

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

    Use master
    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  4. 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 
    
  5. ログイン 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 データベースを使っていますが、他のデータベースにユーザーを作成する場合は、希望するデータベースに切り替えることができます。 次のクエリを実行します。

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

    ヒント

    Microsoft Entra ユーザーの別名 (例: bob@contoso.com) を使用する必要はありませんが、Microsoft Entra ユーザーと Microsoft Entra ログインに対するものと同じ別名を使用することがベスト プラクティスとなります。

  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
    

Note

Microsoft Entra ログインなしで Microsoft Entra ユーザーを作成するための既存の構文は引き続きサポートされています。 次の構文を実行すると、接続先の特定のデータベース内にデータベースに含まれるユーザーが作成されます。 重要なのは、同じ名前のログインが仮想 master データベースに存在する場合でも、このユーザーはどのログインにも関連付けられていない点です。

たとえば、CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER のようにします。

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

##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 データベースのユーザーに、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 ロールを指定しましょう。

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

参照

詳細および例については、次をご覧ください。