チュートリアル: Microsoft Entra ログインを使用したセキュリティ保護 - Azure SQL Managed Instance

適用対象: Azure SQL Managed Instance

この記事では、Microsoft Entra ID (旧称 Azure Active Directory) によってサポートされるサーバー プリンシパル (ログイン) を使用して、Azure SQL Managed Instance をセキュリティで保護する方法について説明します。

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

  • マネージド インスタンスの Microsoft Entra ログインを作成する
  • マネージド インスタンスでのログインにアクセス許可を付与する
  • ログインから Microsoft Entra ユーザーを作成する
  • ユーザーにアクセス許可を割り当ててデータベースのセキュリティを管理する
  • Azure AD ユーザーで偽装を使用する
  • ユーザーでデータベース間クエリを使用する
  • 脅威の防止、監査、データ マスク、暗号化などのセキュリティ機能について学習する

Note

Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。

前提条件

このチュートリアルを完了するには、前提条件として次のものが必要です。

アクセスを制限する

マネージド インスタンスには、プライベート IP アドレスを介してのみアクセスできます。 分離された SQL Server 環境とほぼ同様に、接続を確立するには、アプリケーションまたはユーザーが SQL Managed Instance のネットワーク (VNet) にアクセスする必要があります。 詳細については、SQL Managed Instance へのアプリケーションの接続に関するページを参照してください。

また、マネージド インスタンスでサービス エンドポイントを構成することもできます。これにより、Azure SQL Database の場合と同じ方法でパブリック接続を使用できるようになります。 詳細については、「Azure SQL Managed Instance でパブリック エンドポイントを構成する」を参照してください。

SSMS を使用して Microsoft Entra ログインを作成する

最初の Microsoft Entra ログインは、SQL 管理者またはプロビジョニング中に作成された Microsoft Entra 管理者によって作成できます。 詳細については、「Microsoft Entra 管理者のプロビジョニング (SQL Managed Instance)」を参照してください。

SQL Managed Instance に接続する例については、以下の記事を参照してください。

  1. SQL Server Management Studio (SSMS) を使用して、sysadmin SQL ログインまたは Microsoft Entra 管理者を使用してマネージド インスタンスに接続します。

  2. オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。

  3. クエリ ウィンドウで、次の構文を使用して、ローカルの Microsoft Entra アカウント用のログインを作成します。

    USE master
    GO
    CREATE LOGIN login_name FROM EXTERNAL PROVIDER
    GO
    

    この例では、nativeuser@aadsqlmi.onmicrosoft.com アカウントのログインが作成されます。

    USE master
    GO
    CREATE LOGIN [nativeuser@aadsqlmi.onmicrosoft.com] FROM EXTERNAL PROVIDER
    GO
    
  4. ツール バーの [実行] を選択して、ログインを作成します。

  5. 次の T-SQL コマンドを実行して、新しく追加されたログインを確認します。

    SELECT *  
    FROM sys.server_principals;  
    GO
    

    SSMS オブジェクト エクスプローラーの [結果] タブのスクリーンショット。新しく追加されたログインの name、principal_id、sid、type、および type_desc が表示されています。

詳細については、「CREATE LOGIN」を参照してください。

ログインを作成するためのアクセス許可を付与する

既存のログインには、他の Microsoft Entra ログインを作成するための適切なアクセス許可が付与されているか、適切なサーバー ロールの一部である必要があります。

SQL 認証ログイン

  • ログインが SQL 認証ベースのサーバー プリンシパルの場合、Microsoft Entra アカウントのログインを作成するには sysadmin ロールを割り当てる必要があります。

Microsoft Entra 認証ログイン

  • ログインが Microsoft Entra サーバー プリンシパルの場合は、他の Microsoft Entra ユーザー、グループ、およびアプリケーションのログインを作成するために、sysadmin または securityadmin サーバー ロールを割り当てる必要があります。
  • 他の Microsoft Entra ログインを作成するには、少なくともALTER ANY LOGIN アクセス許可が付与されている必要があります。
  • 既定で、master で新しく作成された Microsoft Entra ログインに付与される標準のアクセス許可は、CONNECT SQL および VIEW ANY DATABASE です。
  • sysadmin サーバー ロールは、マネージド インスタンス内の多くの Microsoft Entra ログインに付与できます。

sysadmin サーバー ロールにログインを追加するには:

  1. マネージド インスタンスにもう一度ログインするか、Microsoft Entra 管理者または SQL プリンシパルである sysadmin で既存の接続を使用します。

  2. オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。

  3. 次の T-SQL 構文を使用して、Microsoft Entra ログインに sysadmin サーバー ロールを付与します。

    ALTER SERVER ROLE sysadmin ADD MEMBER login_name
    GO
    

    次の例では、ログイン nativeuser@aadsqlmi.onmicrosoft.com に sysadmin サーバー ロールを付与します。

    ALTER SERVER ROLE sysadmin ADD MEMBER [nativeuser@aadsqlmi.onmicrosoft.com]
    GO
    

SSMS を使用して追加の Microsoft Entra ログインを作成する

Microsoft Entra ログインが作成され、sysadmin の特権が付与されると、そのログインは FROM EXTERNAL PROVIDER 句と CREATE LOGIN を使用して追加のログインを作成できます。

  1. SQL Server Management Studio (SSMS) で [サーバーに接続] を選択して、Microsoft Entra ログインを使用してマネージド インスタンスに接続します。

    1. [Server name] (サーバー名)に SQL Managed Instance のホスト名を入力します。
    2. [Authentication] (認証) で、[Active Directory - Universal with MFA support] (多要素認証ログイン ウィンドウ) を選択して、多要素認証のログイン ウィンドウを表示します。 サインイン。 詳細については、「ユニバーサル認証 (SSMS による多要素認証のサポート) 」を参照してください。
  2. オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。

  3. クエリ ウィンドウで、次の構文を使用して、別の Microsoft Entra アカウント用のログインを作成します。

    USE master
    GO
    CREATE LOGIN login_name FROM EXTERNAL PROVIDER
    GO
    

    この例では、Microsoft Entra ユーザー bob@aadsqlmi.net のログインが作成されます。このユーザーのドメイン aadsqlmi.net は、Microsoft Entra の aadsqlmi.onmicrosoft.com ドメインとフェデレーションされます。

    次の T-SQL コマンドを実行します。 フェデレーションされた Microsoft Entra アカウントは、SQL Managed Instance でオンプレミスの Windows のログインとユーザーの代わりに使用されます。

    USE master
    GO
    CREATE LOGIN [bob@aadsqlmi.net] FROM EXTERNAL PROVIDER
    GO
    
  4. CREATE DATABASE 構文を使用して、マネージド インスタンスにデータベースを作成します。 このデータベースは、次のセクションでユーザー ログインをテストする際に使用されます。

    1. オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。

    2. クエリ ウィンドウで、次の構文を使用して、MyMITestDB という名前のデータベースを作成します。

      CREATE DATABASE MyMITestDB;
      GO
      
  5. Microsoft Entra ID 内のグループに SQL Managed Instance のログインを作成します。 SQL Managed Instance にログインを追加するには、事前にこのグループが Microsoft Entra ID に存在する必要があります。 「基本グループを作成してメンバーを追加する」を参照してください。 mygroup グループを作成し、このグループにメンバーを追加します。

  6. SQL Server Management Studio で新しいクエリ ウィンドウを開きます。

    この例では、mygroup というグループがMicrosoft Entra ID に存在することを前提としています。 たとえば、次のコマンドを実行します。

    USE master
    GO
    CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER
    GO
    
  7. テストとして、新しく作成したログインまたはグループを使用してマネージド インスタンスにログインします。 マネージド インスタンスへの新しい接続を開き、認証時に新しいログインを使用します。

  8. オブジェクト エクスプローラーで、サーバーを右クリックし、新しい接続に [新しいクエリ] を選択します。

  9. 次のコマンドを実行して、新しく作成した Microsoft Entra ログインのサーバー アクセス許可を確認します。

    SELECT * FROM sys.fn_my_permissions (NULL, 'DATABASE')
    GO
    

ユーザーとログインとしての Azure SQL による Microsoft Entra プリンシパルのサポートは、内部および外部のゲスト ユーザー Microsoft Entra 外部 IDまで拡張されます。 ゲスト ユーザーは、個別に、またはグループの一部として、Azure SQL の他の Microsoft Entra ユーザーと同じように使用できます。 ゲスト ユーザーが他の Microsoft Entra サーバー ログインまたはデータベース ユーザーを作成できるようにするには、Microsoft Entra ディレクトリ内の他の ID を読み取るアクセス許可が必要です。 このアクセス許可はディレクトリ レベルで構成されます。 詳細については、「Microsoft Entra B2B のゲスト ユーザー アクセス」を参照してください。

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

個々のデータベースに対する承認は、SQL Managed Instance でも、SQL Server のデータベースとほぼ同じように動作します。 データベース内の既存のログインからユーザーを作成し、そのデータベースに対するアクセス許可を付与するかデータベース ロールに追加することができます。

MyMITestDB という名前のデータベースと、既定のアクセス許可のみを持つログインを作成したので、次の手順では、そのログインからユーザーを作成します。 この時点では、ログインはマネージド インスタンスに接続し、すべてのデータベースを表示できますが、そのデータベースを操作することはできません。 既定のアクセス許可を持つ Microsoft Entra アカウントでサインインし、新しく作成したデータベースを展開しようとすると、次のエラーが表示されます。

SSMS オブジェクト エクスプローラーのエラー メッセージのスクリーンショット。

データベースのアクセス許可の付与の詳細については、「データベース エンジンの権限の概要」を参照してください。

Microsoft Entra ユーザーを作成し、サンプル テーブルを作成する

Note

ユーザーが Microsoft Entra グループの一部としてサインインする場合、いくつかの制限があります。 たとえば、指定された Microsoft Entra ユーザーは sys.server_principals テーブルの一部ではないため、SUSER_SID を呼び出すと NULL が返されます。 そのため、この場合、特定のストアド プロシージャまたは付与されたアクセス許可の一覧へのアクセスが制限される場合があります。

  1. SQL Server Management Studio で、sysadmin アカウントを使用してマネージド インスタンスにログインします。

  2. オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。

  3. クエリ ウィンドウで、次の構文を使用して、Microsoft Entra ログインからユーザーを作成します。

    USE <Database Name> -- provide your database name
    GO
    CREATE USER user_name FROM LOGIN login_name
    GO
    

    次の例では、ログイン bob@aadsqlmi.net からユーザー bob@aadsqlmi.net を作成します。

    USE MyMITestDB
    GO
    CREATE USER [bob@aadsqlmi.net] FROM LOGIN [bob@aadsqlmi.net]
    GO
    
  4. グループである Microsoft Entra ログインから Microsoft Entra ユーザーを作成することもサポートされています。

    次の例では、Microsoft Entra テナントに存在する Microsoft Entra グループ mygroup のログインを作成します。

    USE MyMITestDB
    GO
    CREATE USER [mygroup] FROM LOGIN [mygroup]
    GO
    

    mygroup に属しているすべてのユーザーが MyMITestDB データベースにアクセスできます。

    重要

    Microsoft Entra ログインから USER を作成するときに、LOGIN の login_name と同じように user_name を指定します。

    詳細については、「CREATE USER」を参照してください。

  5. 新しいクエリ ウィンドウで、次の T-SQL コマンドを使用してテスト テーブルを作成します。

    USE MyMITestDB
    GO
    CREATE TABLE TestTable
    (
    AccountNum varchar(10),
    City varchar(255),
    Name varchar(255),
    State varchar(2)
    );
    
  6. 作成されたユーザーとの接続を SSMS で作成します。 以前に sysadmin が作成した TestTable テーブルが表示されないことがわかります。 ユーザーに、データベースからデータを読み取るためのアクセス許可を付与する必要があります。

  7. 次のコマンドを実行すると、ユーザーが所有する現在のアクセス許可を確認できます。

    SELECT * FROM sys.fn_my_permissions('MyMITestDB','DATABASE')
    GO
    

データベースレベルのロールにユーザーを追加する

ユーザーがデータベース内のデータを表示できるように、データベースレベルのロールをユーザーに付与します。

  1. SQL Server Management Studio で、sysadmin アカウントを使用してマネージド インスタンスにログインします。

  2. オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。

  3. 次の T-SQL 構文を使用して、Microsoft Entra ユーザーに db_datareader データベース ロールを付与します。

    Use <Database Name> -- provide your database name
    ALTER ROLE db_datareader ADD MEMBER user_name
    GO
    

    次の例では、ユーザー bob@aadsqlmi.net とグループ mygroupMyMITestDB データベースに対する db_datareader アクセス許可を付与します。

    USE MyMITestDB
    GO
    ALTER ROLE db_datareader ADD MEMBER [bob@aadsqlmi.net]
    GO
    ALTER ROLE db_datareader ADD MEMBER [mygroup]
    GO
    
  4. 次のコマンドを実行して、データベースに作成された Microsoft Entra ユーザーが存在することを確認します。

    SELECT * FROM sys.database_principals
    GO
    
  5. db_datareader ロールに追加されたユーザーを使用して、マネージド インスタンスへの新しい接続を作成します。

  6. オブジェクト エクスプローラーでデータベースを展開してテーブルを表示します。

    MyMITestDB の [テーブル] のフォルダー構造を示す SSMS のオブジェクト エクスプローラーのスクリーンショット。dbo.TestTable フォルダーが強調表示されています。

  7. 新しいクエリ ウィンドウを開き、次の SELECT ステートメントを実行します。

    SELECT *
    FROM TestTable
    

    テーブルのデータを確認できますか。 列が返されていることがわかるはずです。

    SSMS のオブジェクト エクスプローラーのスクリーンショット。テーブルの列ヘッダー、AccountNum、City、Name、State が表示されています。

Microsoft Entra ログインの権限を借用する

SQL Managed Instance では、Microsoft Entra ログインの権限の借用がサポートされています。

偽装のテスト

  1. SQL Server Management Studio で、sysadmin アカウントを使用してマネージド インスタンスにログインします。

  2. オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。

  3. クエリ ウィンドウで、次のコマンドを使用して新しいストアド プロシージャを作成します。

    USE MyMITestDB
    GO  
    CREATE PROCEDURE dbo.usp_Demo  
    WITH EXECUTE AS 'bob@aadsqlmi.net'  
    AS  
    SELECT user_name();  
    GO
    
  4. 次のコマンドを使用して、このストアド プロシージャの実行時に偽装しているユーザーが bob@aadsqlmi.net であることを確認します。

    Exec dbo.usp_Demo
    
  5. EXECUTE AS LOGIN ステートメントを使用して偽装をテストします。

    EXECUTE AS LOGIN = 'bob@aadsqlmi.net'
    GO
    SELECT SUSER_SNAME()
    REVERT
    GO
    

Note

Microsoft Entra プリンシパルを対象とした次の操作を実行できるのは、sysadmin ロールの一部である SQL サーバーレベルのログインのみです。

  • EXECUTE AS USER
  • EXECUTE AS LOGIN

複数データベース間のクエリを使用する

データベース間クエリは、Microsoft Entra ログインを使用する Microsoft Entra アカウントでサポートされています。 Microsoft Entra グループでデータベース間クエリをテストするには、データベースとテーブルをもう 1 つ作成する必要があります。 データベースとテーブルが既にもう 1 つ存在する場合は、作成をスキップできます。

  1. SQL Server Management Studio で、sysadmin アカウントを使用してマネージド インスタンスにログインします。

  2. オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。

  3. クエリ ウィンドウで、次のコマンドを使用して、MyMITestDB2 という名前のデータベースと TestTable2 という名前のテーブルを作成します。

    CREATE DATABASE MyMITestDB2;
    GO
    USE MyMITestDB2
    GO
    CREATE TABLE TestTable2
    (
    EmpId varchar(10),
    FirstName varchar(255),
    LastName varchar(255),
    Status varchar(10)
    );
    
  4. 新しいクエリ ウィンドウで、次のコマンドを実行して、新しいデータベース MyMITestDB2 にユーザー mygroup を作成し、そのデータベースに対する SELECT アクセス許可を mygroup に付与します。

    USE MyMITestDB2
    GO
    CREATE USER [mygroup] FROM LOGIN [mygroup]
    GO
    GRANT SELECT TO [mygroup]
    GO
    
  5. SQL Server Management Studio を使用して、Microsoft Entra グループ mygroup のメンバーとしてマネージド インスタンスにサインインします。 新しいクエリ ウィンドウを開き、データベース間の SELECT ステートメントを実行します。

    USE MyMITestDB
    SELECT * FROM MyMITestDB2..TestTable2
    GO
    

    TestTable2 からテーブル結果が表示されます。

サポートされているその他のシナリオ

  • SQL エージェントの管理とジョブの実行は、Microsoft Entra ログインでサポートされています。
  • データベースのバックアップと復元操作は、Microsoft Entra ログインが実行できます。
  • Microsoft Entra ログインと認証イベントに関連するすべてのステートメントの監査
  • sysadmin サーバー ロールのメンバーである Microsoft Entra ログインの専用管理者接続。
  • Microsoft Entra ログインは、sqlcmd ユーティリティSQL Server Management Studio ツールの使用でサポートされています。
  • Microsoft Entra ログインによるログオン イベントではログオン トリガーがサポートされています。
  • Service Broker と DB メールは Microsoft Entra ログインを使用して設定できます。

次のステップ

セキュリティ機能の有効化

データベースをセキュリティで保護する方法の包括的な一覧については、SQL Managed Instance のセキュリティ機能に関する記事を参照してください。 次のセキュリティ機能について説明しています。

SQL Managed Instance の機能

SQL Managed Instance の機能全体の概要については、以下を参照してください。