SQL Database または SQL Data Warehouse で Azure Active Directory 認証を構成して管理する

この記事では、Azure AD を作成して設定した後、Azure SQL Database と SQL Data Warehouse で Azure AD を使用する方法を示します。 概要については、「Azure Active Directory 認証」を参照してください。

注意

Azure Active Directory アカウントを使用している場合、Azure VM 上で実行されている SQL Server への接続はサポートされていません。 代わりにドメインの Active Directory アカウントを使用してください。

Azure AD を作成して設定する

Azure AD を作成し、ユーザーとグループを設定します。 Azure AD は初期の Azure AD の管理対象ドメインにすることができます。 また、Azure AD とフェデレーションされるオンプレミスの Active Directory Domain Services にすることもできます。

詳細については、「オンプレミス ID と Azure Active Directory の統合」、Azure AD への独自のドメイン名の追加に関するページ、「Microsoft Azure now supports federation with Windows Server Active Directory」(Microsoft Azure が Windows Server Active Directory とのフェデレーションに対応)、「Azure AD ディレクトリの管理」、Windows PowerShell を使用した Azure AD の管理に関するページ、および「Hybrid Identity Required Ports and Protocols」(ハイブリッド ID の必須ポートとプロトコル) を参照してください。

省略可能: Active Directory を関連付けるか、現在 Azure サブスクリプションに関連付けられている Active Directory を変更する

データベースを組織の Azure AD ディレクトリに関連付けるには、そのディレクトリを、データベースをホストする Azure サブスクリプションの信頼できるディレクトリにします。 詳細については、 Azure サブスクリプションを Azure AD に関連付ける方法を参照してください。

追加情報: すべての Azure サブスクリプションには、Azure AD インスタンスとの信頼関係があります。 つまり、ディレクトリを信頼してユーザー、サービス、デバイスを認証します。 複数のサブスクリプションが同じディレクトリを信頼できますが、1 つのサブスクリプションは 1 つのディレクトリだけを信頼します。 サブスクリプションが信頼しているディレクトリは、https://manage.windowsazure.com/[設定] タブで確認できます。 このサブスクリプションとディレクトリの間の信頼関係は、サブスクリプションと Azure 内の他のすべてのリソース (Web サイト、データベースなど) の間の関係と異なります。後者は、サブスクリプションの子リソースにより近いものです。 サブスクリプションの有効期限が切れた場合、サブスクリプションに関連付けられたこれらの他のリソースへのアクセスも停止します。 一方、ディレクトリは Azure 内に残っており、別のサブスクリプションをそのディレクトリと関連付けて、ディレクトリ ユーザーの管理を継続できます。 リソースの詳細については、Azure でのリソース アクセスの説明に関するページを参照してください。

次の手順は、特定のサブスクリプションの関連付けられたディレクトリを変更する方法を示しています。

  1. Azure サブスクリプションの管理者を使用して Azure クラシック ポータル に接続します。
  2. 左側のバナーで [設定]を選択します。
  3. [設定] 画面にサブスクリプションが表示されます。 目的のサブスクリプションが表示されていない場合は、上部にある [サブスクリプション] をクリックし、[ディレクトリでフィルター] ボックスの一覧でサブスクリプションが含まれるディレクトリを選択して、[適用] をクリックします。

    サブスクリプションを選択する

  4. [設定] 領域でサブスクリプションをクリックし、ページの下部にある [ディレクトリの編集] をクリックします。

    ad-settings-portal

  5. [ディレクトリの編集] ボックスで、SQL Server または SQL Data Warehouse に関連付けられている Azure Active Directory を選択し、矢印をクリックして次に進みます。

    edit-directory-select

  6. [ディレクトリ マッピングの確認] ダイアログ ボックスで、"共同管理者は全員削除されます。" と表示されていることを確認します。

    edit-directory-confirm

  7. チェック マークをクリックしてポータルを再度読み込みます。

    注意

    ディレクトリを変更すると、共同管理者、Azure AD のユーザーとグループ、ディレクトリでサポートされているリソース ユーザーすべてへのアクセスが削除され、それらはこのサブスクリプションまたはそのリソースにアクセスできなくなります。 サービス管理者のみ、新しいディレクトリに基づくプリンシパルのアクセスを構成できます。 この変更は、すべてのリソースに反映されるまで相当な時間がかかる場合があります。 ディレクトリを変更すると、SQL Database および SQL Data Warehouse の Azure AD 管理者も変更されるため、既存のすべての Azure AD ユーザーはデータベースにアクセスできなくなります。 Azure AD の管理者を再設定し (後で説明)、新しい Azure AD ユーザーを作成する必要があります。

Azure SQL Server の Azure AD 管理者を作成する

(SQL Database または SQL Data Warehouse をホストする) 各 Azure SQL Server は、Azure SQL Server 全体の管理者である 1 つのサーバー管理者アカウントから開始します。 Azure AD アカウントであるもう 1 つの SQL Server 管理者を作成する必要があります。 このプリンシパルは、master データベースの包含データベース ユーザーとして作成されます。 管理者の場合、サーバー管理者アカウントは、すべてのユーザー データベースの db_owner ロールのメンバーであり、dbo ユーザーとして各ユーザー データベースに入ります。 サーバー管理者アカウントについて詳しくは、「Azure SQL Database におけるデータベースとログインの管理」をご覧ください。

geo レプリケーションで Azure Active Directory を使用する場合は、プライマリ サーバーとセカンダリ サーバーの両方で Azure Active Directory 管理者を構成する必要があります。 サーバーに Azure Active Directory 管理者がいない場合、Azure Active Directory へのログイン時に、"接続できません" サーバー エラーが発生します。

注意

Azure AD アカウント (Azure SQL Server の管理者アカウントを含みます) に基づいていないユーザーは、Azure AD に基づくユーザーを作成できません。これは、Azure AD で提示されるデータベース ユーザーを検証するアクセス許可がないためです。

Azure SQL Server の Azure Active Directory 管理者をプロビジョニングします

次の 2 つの手順は、Azure Portal と PowerShell を使用して、Azure SQL Server の Azure Active Directory 管理者をプロビジョニングする方法を示しています。

Azure Portal

  1. Azure Portal の右上隅にあるユーザー アイコンをクリックすると、Active Directory 候補の一覧がドロップダウンで表示されます。 既定の Azure AD として適切な Active Directory を選択します。 この手順では、Active Directory とサブスクリプションの関連付けを Azure SQL Server とリンクすることで、Azure AD と SQL Server の両方に同じサブスクリプションが使用されるようにします (Azure SQL Server は、Azure SQL Database または Azure SQL Data Warehouse をホストしている可能性があります)。
    choose-ad

  2. 左側のバナーで [SQL Server] を選択し、使用する SQL Server を選択した後、[SQL Server] ブレードで、[Active Directory 管理者] をクリックします。

  3. [Active Directory 管理者] ブレードで、[管理者の設定] をクリックします。
    Active Directory を選択する

  4. [管理者の追加] ブレードで、ユーザーを検索し、管理者にするユーザーまたはグループを選択してから [選択] をクリックします。 [Active Directory 管理者] ブレードには、Active Directory のメンバーとグループがすべて表示されます。 淡色表示されているユーザーまたはグループは、Azure AD 管理者としてサポートされていないため選択できません (「Azure Active Directory 認証を使用して SQL Database または SQL Data Warehouse を認証する」の「Azure AD の機能と制限事項」セクションでサポートされている管理者の一覧を参照してください)。ロール ベースのアクセス制御 (RBAC) はポータルにのみ適用され、SQL Server には反映されません。
    管理者を選択する

  5. [Active Directory 管理者] ブレードの上部にある [保存] をクリックします。
    管理者を保存する

管理者を変更する処理には数分かかる場合があります。 処理が完了すると、 [Active Directory 管理者] ボックスに新しい管理者が表示されます。

注意

Azure AD 管理者をセットアップする場合、新しい管理者名 (ユーザーまたはグループ) が SQL Server 認証ユーザーとして仮想マスター データベースに既に存在していてはいけません。 存在する場合、Azure AD 管理者のセットアップは失敗します。その作成をロールバックされ、そのような管理者 (名前) が既に存在していることが示されます。 そのような SQL Server 認証ユーザーは Azure AD に属していないため、Azure AD 認証を使用してサーバーに接続しようとしても失敗します。

後で管理者を削除するには、[Active Directory 管理者] ブレードの上部にある [管理者の削除] をクリックし、[保存] をクリックします。

PowerShell

PowerShell コマンドレットを実行するには、Azure PowerShell をインストールし、実行している必要があります。 詳細については、「 Azure PowerShell のインストールと構成の方法」をご覧ください。

Azure AD 管理者をプロビジョニングするには、次のような Azure PowerShell コマンドを実行する必要があります。

  • Add-AzureRmAccount
  • Select-AzureRmSubscription

Azure AD 管理者のプロビジョニングと管理に使用するコマンドレットは、次のとおりです。

コマンドレット名 Description
Set-AzureRMSqlServerActiveDirectoryAdministrator Azure SQL Server または Azure SQL Data Warehouse の Azure Active Directory 管理者をプロビジョニングします (現在のサブスクリプションから実行する必要があります)。
Remove-AzureRMSqlServerActiveDirectoryAdministrator Azure SQL Server または Azure SQL Data Warehouse の Azure Active Directory 管理者を削除します。
Get-AzureRMSqlServerActiveDirectoryAdministrator 現在 Azure SQL Server または Azure SQL Data Warehouse 用に構成されている Azure Active Directory 管理者に関する情報を返します。

これらの各コマンドの詳細を確認するには、 get-help Set-AzureRmSqlServerActiveDirectoryAdministratorのように PowerShell コマンドの get-help を使用します。

次のスクリプトでは、Group-23 という名前のリソース グループ内にあるサーバー demo_server に対して、DBA_Group という名前の Azure AD 管理者グループ (オブジェクト ID 40b79501-b343-44ed-9ce7-da4c8cc7353f) をプロビジョニングします。

Set-AzureRmSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23"
-ServerName "demo_server" -DisplayName "DBA_Group"

DisplayName 入力パラメーターには、Azure AD の表示名またはユーザー プリンシパル名を使用できます。 たとえば、DisplayName="John Smith"DisplayName="johns@contoso.com"す。 Azure AD グループの場合は、Azure AD の表示名のみがサポートされています。

注意

Azure PowerShell コマンド Set-AzureRmSqlServerActiveDirectoryAdministrator では、サポートされていないユーザーに対する Azure AD 管理者のプロビジョニングは禁止されていません。 サポートされていないユーザーのプロビジョニングは可能ですが、このようなユーザーはデータベースに接続できません

次の例では、オプションとして ObjectIDを使用します。

Set-AzureRmSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23"
-ServerName "demo_server" -DisplayName "DBA_Group" -ObjectId "40b79501-b343-44ed-9ce7-da4c8cc7353f"

注意

DisplayName が一意でない場合は、Azure AD の ObjectID が必要です。 ObjectIDDisplayName の値を取得するには、Azure クラシック ポータルの [Active Directory] セクションを使用して、ユーザーまたはグループのプロパティを確認します。

次の例では、Azure SQL Server の現在の Azure AD 管理者に関する情報が返されます。

Get-AzureRmSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server" | Format-List

次の例では、Azure AD 管理者が削除されます。

Remove-AzureRmSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server"

Azure Active Directory 管理者は、REST API を使用してプロビジョニングすることもできます。 詳細については、「 Service Management REST API リファレンスと Azure SQL Database の操作

CLI

以下の CLI コマンドを呼び出して、Azure AD 管理者をプロビジョニングすることもできます。

コマンド Description
az sql server ad-admin create Azure SQL Server または Azure SQL Data Warehouse の Azure Active Directory 管理者をプロビジョニングします (現在のサブスクリプションから実行する必要があります)。
az sql server ad-admin delete Azure SQL Server または Azure SQL Data Warehouse の Azure Active Directory 管理者を削除します。
az sql server ad-admin list 現在 Azure SQL Server または Azure SQL Data Warehouse 用に構成されている Azure Active Directory 管理者に関する情報を返します。
az sql server ad-admin update Azure SQL Server または Azure SQL Data Warehouse の Active Directory 管理者を更新します。

CLI コマンドの詳細については、「SQL - az sql」を参照してください。

クライアント コンピューターを構成する

Azure AD の ID を使用して Azure SQL Database または Azure SQL Data Warehouse に接続するアプリケーションまたはユーザーが存在するすべてのクライアント コンピューターには、次のソフトウェアをインストールする必要があります。

これらの要件は、次の操作を行うことで満たすことができます。

  • SQL Server 2016 Management Studio または SQL Server Data Tools for Visual Studio 2015 をインストールすると、.NET Framework 4.6 の要件が満たされます。
  • SSMS の場合、x86 バージョンの ADALSQL.DLLがインストールされます。
  • SSDT の場合、amd64 バージョンの ADALSQL.DLLがインストールされます。
  • Visual Studio のダウンロード 」にある最新の Visual Studio をインストールすると、.NET Framework 4.6 の要件は満たされますが、必要な amd64 バージョンの ADALSQL.DLLはインストールされません。

Azure AD の ID にマップされている包含データベース ユーザーをデータベースに作成する

Azure Active Directory 認証では、データベース ユーザーを包含データベース ユーザーとして作成することが必要です。 Azure AD の ID に基づく包含データベース ユーザーは、master データベースにログインを持たないデータベース ユーザーで、そのデータベースに関連付けられている Azure AD ディレクトリの ID にマップされています。 Azure AD の ID には、個々のユーザー アカウントにもグループ アカウントにもなります。 包含データベース ユーザーの詳細については、「 包含データベース ユーザー - データベースの可搬性を確保する」を参照してください。

注意

ポータルを使用して、データベース ユーザー (管理者を除く) を作成することはできません。 RBAC ロールは、SQL Server、SQL Database、または SQL Data Warehouse には反映されません。 Azure RBAC ロールは Azure リソースの管理に使用され、データベースのアクセス許可には適用されません。 たとえば、 SQL Server 共同作成者 ロールでは、SQL Database または SQL Data Warehouse に接続するためのアクセス権は付与されません。 Transact-SQL ステートメントを使用して、アクセス許可をデータベースで直接付与する必要があります。

Azure AD ベースの包含データベース ユーザー (データベースを所有するサーバー管理者以外) を作成するには、少なくとも ALTER ANY USER アクセス許可を持つユーザーとして、Azure AD の ID でデータベースに接続します。 その後、次の Transact-SQL 構文を使用します。

CREATE USER <Azure_AD_principal_name> FROM EXTERNAL PROVIDER;

Azure_AD_principal_name には、Azure AD ユーザーのユーザー プリンシパル名または Azure AD のグループの表示名を指定できます。

例: Azure AD のフェデレーション ドメインまたは管理対象ドメインのユーザーを表す包含データベース ユーザーを作成するには、次のようにします。

CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER;
CREATE USER [alice@fabrikam.onmicrosoft.com] FROM EXTERNAL PROVIDER;

Azure AD またはフェデレーション ドメインのグループを表す包含データベース ユーザーを作成するには、セキュリティ グループの表示名を指定します。

CREATE USER [ICU Nurses] FROM EXTERNAL PROVIDER;

Azure AD トークンを使用して接続するアプリケーションを表す包含データベース ユーザーを作成するには、次のようにします。

CREATE USER [appName] FROM EXTERNAL PROVIDER;

ヒント

使用している Azure サブスクリプションに関連付けられている Azure Active Directory とは別の Azure Active Directory から、ユーザーを直接作成することはできません。 ただし、別の Active Directory のメンバーのうち、関連付けられている Active Directory にインポート済みのユーザー (外部ユーザーと呼ばれます) は、テナント Active Directory の Active Directory グループに追加できます。 外部の Active Directory のユーザーは、この AD グループの包含データベース ユーザーを作成することで SQL Database にアクセスできるようになります。

Azure Active Directory の ID に基づく包含データベース ユーザーの作成の詳細については、「 CREATE USER (Transact-SQL)」を参照してください。

注意

Azure SQL Server の Azure Active Directory 管理者を削除すると、Azure AD 認証ユーザーはサーバーに接続できなくなります。 必要に応じて、SQL Database 管理者は不要な Azure AD ユーザーを手動で削除できます。

注意

"接続がタイムアウトしました" と表示された場合は、接続文字列の TransparentNetworkIPResolution パラメーターを false に設定することが必要になる場合があります。 詳しくは、「Connection timeout issue with .NET Framework 4.6.1 - TransparentNetworkIPResolution」(.NET Framework 4.6.1 での接続タイムアウトの問題 - TransparentNetworkIPResolution) をご覧ください。

データベース ユーザーを作成すると、そのユーザーには CONNECT アクセス許可が付与され、PUBLIC ロールのメンバーとしてそのデータベースに接続できるようになります。 最初にこのユーザーが利用できるアクセス許可は、PUBLIC ロールに付与されているアクセス許可か、またはそのユーザーが属している Azure AD グループに付与されているアクセス許可のみです。 Azure AD ベースの包含データベース ユーザーをプロビジョニングすると、他の種類のユーザーにアクセス許可を付与する場合と同様に、そのユーザーに追加のアクセス許可を付与できます。 通常は、データベース ロールにアクセス許可を付与し、そのロールにユーザーを追加します。 詳細については、 データベース エンジンのアクセス許可の基本知識に関するページを参照してください。 特殊な SQL Database ロールの詳細については、「 Azure SQL Database におけるデータベースとログインの管理」を参照してください。 外部ユーザーとして管理対象ドメインにインポートされるフェデレーション ドメイン ユーザー アカウントは、管理対象ドメインの ID を使用する必要があります。

注意

データベースのメタデータでは、Azure AD ユーザーはタイプ E (EXTERNAL_USER) 、グループはタイプ X (EXTERNAL_GROUPS) でマークされます。 詳細については、「sys.database_principals」を参照してください。

SSMS または SSDT を使用して、ユーザー データベースまたはデータ ウェアハウスに接続する

Azure AD 管理者が正しく設定されていることを確認するには、Azure AD の管理者アカウントを使用して master データベースに接続します。 Azure AD ベースの包含データベース ユーザー (データベースを所有しているサーバー管理者以外) をプロビジョニングするには、そのデータベースへのアクセス権を持つ Azure AD の ID を使用してデータベースに接続します。

重要

Azure Active Directory 認証は、SQL Server 2016 Management Studio および Visual Studio 2015 の SQL Server Data Tools でサポートされています。 SSMS の 2016 年 8 月のリリースには、Active Directory Universal 認証のサポートも含まれます。これにより、管理者は、電話、テキスト メッセージ、スマート カードと暗証番号 (PIN)、またはモバイル アプリ通知を使用する Multi-Factor Authentication を要求できます。

Azure AD の ID で SSMS または SSDT を利用して接続する

次の手順は、SQL Server Management Studio または SQL Server Database Tools で Azure AD の ID を使用して SQL Database に接続する方法を示しています。

Active Directory 統合認証

フェデレーション ドメインから Azure Active Directory の資格情報を使用して Windows にログオンしている場合は、この方法を使用します。

  1. Management Studio または Data Tools を起動し、[サーバーへの接続] (または [データベース エンジンへの接続]) ダイアログ ボックスの [認証] ボックスで、[Active Directory - 統合] を選択します。 接続用の既存の資格情報が表示されるため、パスワードは不要であるか、入力できません。

    AD 統合認証を選択する

  2. [オプション] ボタンをクリックし、[接続プロパティ] ページの [データベースへの接続] ボックスに、接続先となるユーザー データベースの名前を入力します。 [AD ドメインの名前またはテナントの ID] オプションは MFA ユニバーサル接続オプションでのみサポートされており、それ以外の場合はグレーで表示されます。

    データベース名を選択する

Active Directory パスワード認証

Azure AD の管理対象ドメインを使用して Azure AD のプリンシパル名で接続する場合は、この方法を使用します。 また、リモートで作業する場合など、ドメインにアクセスできないフェデレーション アカウントにもこの方法を使用できます。

この方法を使用するのは、Azure とフェデレーションされていないドメインの資格情報を使用して Windows にログオンしている場合や、初期ドメインまたはクライアント ドメインに基づく Azure AD で Azure AD 認証を使用する場合です。

  1. Management Studio または Data Tools を起動し、[サーバーへの接続] (または [データベース エンジンへの接続]) ダイアログ ボックスの [認証] ボックスで、[Active Directory - パスワード] を選択します。
  2. [ユーザー名] ボックスに、Azure Active Directory のユーザー名を username@domain.com の形式で入力します。これは、Azure Active Directory のアカウントか、Azure Active Directory とフェデレーションするドメインのアカウントである必要があります。
  3. [パスワード] ボックスに、Azure Active Directory アカウントまたはフェデレーション ドメイン アカウントのユーザー パスワードを入力します。

    AD パスワード認証を選択する

  4. [オプション] ボタンをクリックし、[接続プロパティ] ページの [データベースへの接続] ボックスに、接続先となるユーザー データベースの名前を入力します。 (前のオプションの図を参照してください)。

クライアント アプリケーションからの Azure AD の ID を使用した接続

次の手順は、クライアント アプリケーションから Azure AD の ID を使用して SQL データベースに接続する方法を示しています。

Active Directory 統合認証

統合 Windows 認証を使用するには、ドメインの Active Directory が Azure Active Directory とフェデレーションする必要があります。 データベースに接続するクライアント アプリケーション (またはサービス) は、ユーザーのドメイン資格情報を使用してドメインに参加しているコンピューターで実行されている必要があります。

統合認証と Azure AD の ID を使用してデータベースに接続するには、データベース接続文字列内の Authentication キーワードを "Active Directory Integrated" に設定する必要があります。 次の C# のコード サンプルでは、ADO .NET を使用します。

string ConnectionString =
@"Data Source=n9lxnyuzhv.database.windows.net; Authentication=Active Directory Integrated; Initial Catalog=testdb;";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();

接続文字列キーワード Integrated Security=True は、Azure SQL Database への接続ではサポートされていません。 ODBC 接続を行うには、スペースを削除して Authentication を 'ActiveDirectoryIntegrated' に設定する必要があります。

Active Directory パスワード認証

統合認証と Azure AD の ID を使用してデータベースに接続するには、Authentication キーワードを "Active Directory Password" に設定する必要があります。 接続文字列にユーザー ID (UID) とパスワード (PWD) のキーワードと値を含める必要があります。 次の C# のコード サンプルでは、ADO .NET を使用します。

string ConnectionString =
@"Data Source=n9lxnyuzhv.database.windows.net; Authentication=Active Directory Password; Initial Catalog=testdb;  UID=bob@contoso.onmicrosoft.com; PWD=MyPassWord!";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();

GitHub の Azure AD 認証のデモで入手できるデモ コード サンプルを使用して、Azure AD の認証方法の詳細を確認してください。

Azure AD トークン

この認証方法を使用すると、中間層サービスは Azure Active Directory (AAD) からトークンを取得して、Azure SQL Database または Azure SQL Data Warehouse に接続できます。 この方法では、証明書ベースの認証などの高度なシナリオが可能になります。 Azure AD トークンの認証を使用するには、4 つの基本的な手順を完了する必要があります。

  1. Azure Active Directory にアプリケーションを登録し、コードのクライアント ID を取得します。
  2. アプリケーションを表すデータベース ユーザーを作成します (上の手順 6. で完了しています)。
  3. アプリケーションを実行するクライアント コンピューターで証明書を作成します。
  4. アプリケーションのキーとして、証明書を追加します。

サンプルの接続文字列を次に示します。

string ConnectionString =@"Data Source=n9lxnyuzhv.database.windows.net; Initial Catalog=testdb;"
SqlConnection conn = new SqlConnection(ConnectionString);
connection.AccessToken = "Your JWT token"
conn.Open();

詳細については、「 SQL Server Security Blog (SQL Server のセキュリティに関するブログ)」をご覧ください。 証明書の追加の詳細については、「Azure Active Directory の証明書ベースの認証の概要」を参照してください。

sqlcmd

次のステートメントは、sqlcmd のバージョン 13.1 を使用して接続しています。これは、ダウンロード センターから入手できます。

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -U bob@contoso.com -P MyAADPassword -G -l 30

次のステップ