適用対象:Azure SQL Managed Instance
この記事では、Microsoft Entra ID (旧称 Azure Active Directory) によってサポートされるサーバー プリンシパル (ログイン) を使用して、Azure SQL Managed Instance をセキュリティで保護する方法について説明します。
このチュートリアルでは、次の作業を行う方法について説明します。
- SQL マネージド インスタンスの Microsoft Entra ログインを作成します。
- SQL マネージド インスタンス内のログインにアクセス許可を付与します。
- ログインから Microsoft Entra ユーザーを作成します。
- ユーザーにアクセス許可を割り当て、データベースのセキュリティを管理します。
- ユーザーと偽装を使用します。
- ユーザーとデータベース間クエリを使用します。
- 脅威の防止、監査、データ マスク、暗号化などのセキュリティ機能について説明します。
Note
Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。
前提条件
このチュートリアルを完了するには、前提条件として次のものが必要です。
- SQL Server Management Studio (SSMS)
- SQL マネージド インスタンス
- SQL マネージド インスタンスにアクセスでき、SQL マネージド インスタンスの Microsoft Entra 管理者をプロビジョニングしました。 その他の詳細については、次をご覧ください。
アクセスを制限する
SQL マネージド インスタンスには、プライベート IP アドレスを使用してアクセスできます。 分離された SQL Server 環境とほぼ同様に、接続を確立するには、アプリケーションまたはユーザーが SQL Managed Instance のネットワーク (VNet) にアクセスする必要があります。 詳細については、SQL Managed Instance へのアプリケーションの接続に関するページを参照してください。
SQL マネージド インスタンスでサービス エンドポイントを構成することもできます。これにより、Azure SQL Database の場合と同じ方法でパブリック接続が可能になります。 詳細については、「Azure SQL Managed Instance でパブリック エンドポイントを構成する」を参照してください。
SSMS を使用して Microsoft Entra ログインを作成する
SQL 管理者は、最初の Microsoft Entra ログイン、またはプロビジョニング中に作成された Microsoft Entra 管理者を作成できます。 詳細については、「Microsoft Entra 管理者のプロビジョニング (SQL Managed Instance)」を参照してください。
SQL Managed Instance に接続する例については、以下の記事を参照してください。
- クイック スタート: SQL Managed Instance に接続するように Azure VM を構成する
- クイック スタート: オンプレミスから SQL Managed Instance へのポイント対サイト接続を構成する
SQL Server Management Studio (SSMS) を使用して、sysadmin SQL ログインまたは Microsoft Entra 管理者を使用して SQL マネージド インスタンスに接続します。
オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。
クエリ ウィンドウで、次の構文を使用して、ローカルの 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ツール バーの [実行] を選択して、ログインを作成します。
次の T-SQL コマンドを実行して、新しく追加されたログインを確認します。
SELECT * FROM sys.server_principals; GO
詳細については、「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 サーバー ロールは、SQL マネージド インスタンス内の多くの Microsoft Entra ログインに付与できます。
sysadmin サーバー ロールにログインを追加するには:
SQL マネージド インスタンスに再度ログインするか、 sysadmin である Microsoft Entra 管理者または SQL プリンシパルとの既存の接続を使用します。
オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。
次の T-SQL 構文を使用して、Microsoft Entra ログインに sysadmin サーバー ロールを付与します。
ALTER SERVER ROLE sysadmin ADD MEMBER login_name GO次の例では、ログイン に
nativeuser@aadsqlmi.onmicrosoft.comサーバー ロールを付与します。ALTER SERVER ROLE sysadmin ADD MEMBER [nativeuser@aadsqlmi.onmicrosoft.com] GO
SSMS を使用して追加の Microsoft Entra ログインを作成する
Microsoft Entra ログインが作成され、sysadmin 特権が付与されると、そのログインでは、FROM EXTERNAL PROVIDERで CREATE LOGIN 句を使用して追加のログインを作成できます。
SQL Server Management Studio (SSMS) で [ サーバーに接続 ] を選択して、Microsoft Entra ログインを使用して SQL マネージド インスタンスに接続します。
- [Server name] (サーバー名)に SQL Managed Instance のホスト名を入力します。
- [認証] で、Microsoft Entra MFA を選択して多要素認証ログイン ウィンドウを表示します。 サインイン。 詳細については、「ユニバーサル認証 (SSMS による多要素認証のサポート) 」を参照してください。
オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。
クエリ ウィンドウで、次の構文を使用して、別の Microsoft Entra アカウント用のログインを作成します。
USE master GO CREATE LOGIN login_name FROM EXTERNAL PROVIDER GOこの例では、ドメイン
bob@aadsqlmi.netが Microsoft Entraaadsqlmi.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 GOCREATE DATABASE 構文を使用して、SQL マネージド インスタンスにデータベースを作成します。 このデータベースは、次のセクションでユーザー ログインをテストする際に使用されます。
オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。
クエリ ウィンドウで、次の構文を使用して、MyMITestDB という名前のデータベースを作成します。
CREATE DATABASE MyMITestDB; GO
Microsoft Entra ID 内のグループに SQL Managed Instance のログインを作成します。 SQL Managed Instance にログインを追加するには、事前にこのグループが Microsoft Entra ID に存在する必要があります。 「基本グループを作成してメンバーを追加する」を参照してください。 グループ mygroup を作成し、このグループにメンバーを追加します。
SQL Server Management Studio で新しいクエリ ウィンドウを開きます。
この例では、mygroup というグループがMicrosoft Entra ID に存在することを前提としています。 たとえば、次のコマンドを実行します。
USE master GO CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER GOテストとして、新しく作成されたログインまたはグループを使用して SQL マネージド インスタンスにログインします。 SQL マネージド インスタンスへの新しい接続を開き、認証時に新しいログインを使用します。
オブジェクト エクスプローラーで、サーバーを右クリックし、新しい接続に [新しいクエリ] を選択します。
次のコマンドを実行して、新しく作成した 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 という名前のデータベースと、既定のアクセス許可のみを持つログインを作成したので、次の手順では、そのログインからユーザーを作成します。 現時点では、ログインは SQL マネージド インスタンスに接続してすべてのデータベースを表示できますが、データベースと対話することはできません。 既定のアクセス許可を持つ Microsoft Entra アカウントでサインインし、新しく作成したデータベースを展開しようとすると、次のエラーが表示されます。
データベースのアクセス許可の付与の詳細については、「データベース エンジンの権限の概要」を参照してください。
Microsoft Entra ユーザーを作成し、サンプル テーブルを作成する
Note
ユーザーが Microsoft Entra グループの一部としてサインインする場合、いくつかの制限があります。
たとえば、指定された Microsoft Entra ユーザーがsys.server_principals テーブルに含まれていないため、SUSER_SIDの呼び出しはNULLを返します。
そのため、この場合、特定のストアド プロシージャまたは付与されたアクセス許可の一覧へのアクセスが制限される可能性があります。
SQL Server Management Studio で sysadmin アカウントを使用して SQL マネージド インスタンスにログインします。
オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。
クエリ ウィンドウで、次の構文を使用して、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グループである Microsoft Entra ログインから Microsoft Entra ユーザーを作成することもサポートされています。
次の例では、Microsoft Entra テナントに存在する Microsoft Entra グループ mygroup のログインを作成します。
USE MyMITestDB GO CREATE USER [mygroup] FROM LOGIN [mygroup] GOmygroup に属しているすべてのユーザーが MyMITestDB データベースにアクセスできます。
重要
Microsoft Entra ログインから USER を作成する場合は、
LOGINと同じlogin_nameとしてuser_nameを指定します。詳細については、「CREATE USER」を参照してください。
新しいクエリ ウィンドウで、次の T-SQL コマンドを使用してテスト テーブルを作成します。
USE MyMITestDB GO CREATE TABLE TestTable ( AccountNum varchar(10), City varchar(255), Name varchar(255), State varchar(2) );作成されたユーザーとの接続を SSMS で作成します。 前に sysadmin によって作成された TestTable テーブルが表示されないことがわかります。 ユーザーに、データベースからデータを読み取るためのアクセス許可を付与する必要があります。
次のコマンドを実行すると、ユーザーが所有する現在のアクセス許可を確認できます。
SELECT * FROM sys.fn_my_permissions('MyMITestDB','DATABASE') GO
データベースレベルのロールにユーザーを追加する
ユーザーがデータベース内のデータを表示できるように、データベースレベルのロールをユーザーに付与します。
SQL Server Management Studio を使用して 、sysadmin アカウントを使用して SQL マネージド インスタンスにログインします。
オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。
次の 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データベースに対するdb_datareaderアクセス許可を持つユーザー とグループ mygroup を提供します。USE MyMITestDB GO ALTER ROLE db_datareader ADD MEMBER [bob@aadsqlmi.net] GO ALTER ROLE db_datareader ADD MEMBER [mygroup] GO次のコマンドを実行して、データベースに作成された Microsoft Entra ユーザーが存在することを確認します。
SELECT * FROM sys.database_principals GOdb_datareader ロールに追加されたユーザーを使用して、SQL マネージド インスタンスへの新しい接続を作成します。
オブジェクト エクスプローラーでデータベースを展開してテーブルを表示します。
新しいクエリ ウィンドウを開き、次の
SELECTステートメントを実行します。SELECT * FROM TestTableテーブルのデータを確認できますか。 次のスクリーンショットに示すように、返される列が表示されます。
Microsoft Entra ログインの権限を借用する
SQL Managed Instance では、Microsoft Entra ログインの権限の借用がサポートされています。
偽装のテスト
SQL Server Management Studio を使用して 、sysadmin アカウントを使用して SQL マネージド インスタンスにログインします。
オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。
クエリ ウィンドウで、次のコマンドを使用して新しいストアド プロシージャを作成します。
USE MyMITestDB GO CREATE PROCEDURE dbo.usp_Demo WITH EXECUTE AS 'bob@aadsqlmi.net' AS SELECT user_name(); GO次のコマンドを使用して、このストアド プロシージャの実行時に偽装しているユーザーが
bob@aadsqlmi.netであることを確認します。Exec dbo.usp_DemoEXECUTE AS LOGINステートメントを使用して偽装をテストします。EXECUTE AS LOGIN = 'bob@aadsqlmi.net' GO SELECT SUSER_SNAME() REVERT GO
Note
sysadmin ロールの一部である SQL サーバー レベルのログインのみが、Microsoft Entra プリンシパルを対象とする次の操作を実行できます。
EXECUTE AS USEREXECUTE AS LOGIN
複数データベース間のクエリを使用する
データベース間クエリは、Microsoft Entra ログインを使用する Microsoft Entra アカウントでサポートされています。 Microsoft Entra グループでデータベース間クエリをテストするには、データベースとテーブルをもう 1 つ作成する必要があります。 データベースとテーブルが既にもう 1 つ存在する場合は、作成をスキップできます。
SQL Server Management Studio を使用して 、sysadmin アカウントを使用して SQL マネージド インスタンスにログインします。
オブジェクト エクスプローラーで、サーバーを右クリックし、 [新しいクエリ] を選択します。
クエリ ウィンドウで、次のコマンドを使用して、MyMITestDB2 という名前のデータベースと TestTable2 という名前のテーブルを作成します。
CREATE DATABASE MyMITestDB2; GO USE MyMITestDB2 GO CREATE TABLE TestTable2 ( EmpId varchar(10), FirstName varchar(255), LastName varchar(255), Status varchar(10) );新しいクエリ ウィンドウで、次のコマンドを実行して、新しいデータベース MyMITestDB2 にユーザー mygroup を作成し、そのデータベースに対する
SELECTアクセス許可を mygroup に付与します。USE MyMITestDB2 GO CREATE USER [mygroup] FROM LOGIN [mygroup] GO GRANT SELECT TO [mygroup] GOMICROSOFT Entra グループ mygroup のメンバーとして SQL Server Management Studio を使用して、SQL マネージド インスタンスにサインインします。 新しいクエリ ウィンドウを開き、データベース間
SELECTステートメントを実行します。USE MyMITestDB SELECT * FROM MyMITestDB2..TestTable2 GOTestTable2 からテーブル結果が表示されます。
サポートされているその他のシナリオ
- SQL エージェントの管理とジョブの実行は、Microsoft Entra ログインでサポートされています。
- Microsoft Entra ログインでは、データベースのバックアップと復元の操作を実行できます。
- Microsoft Entra ログインと認証イベントに関連するすべてのステートメントの監査。
- sysadmin server-role のメンバーである Microsoft Entra ログインの専用管理者接続。
- Microsoft Entra ログインは、sqlcmd ユーティリティと SQL Server Management Studio ツールの使用でサポートされています。
- Microsoft Entra ログインによるログオン イベントではログオン トリガーがサポートされています。
- Service Broker と DB メールは Microsoft Entra ログインを使用して設定できます。