チュートリアル: SQL Server の Azure Active Directory 認証を設定する

適用対象: SQL Server 2022 (16.x)

このドキュメントでは、SQL Server用に Azure Active Directory (Azure AD) 認証を設定する方法と、さまざまな Azure AD 認証方法を使用する方法の詳細なプロセスについて説明します。 この機能は、SQL Server 2022 (16.x) 以降のバージョンで使用でき、オンプレミスのSQL Server、Windows および Linux ホスト、および Windows Azure VM のSQL Server 2022 でのみサポートされます。

このチュートリアルでは、以下の内容を学習します。

  • Azure AD アプリケーションを作成して登録する
  • Azure AD アプリケーションにアクセス許可を付与する
  • 証明書を作成して割り当てる
  • Azure portal を使用して SQL Server の Azure AD 認証を構成する
  • ログインとユーザーを作成する
  • サポートされている認証方法を使用して接続する

前提条件

認証の前提条件

Note

SQL Serverの Azure AD 管理者を設定するときに、Azure Key Vault 証明書と Azure AD アプリケーションを自動的に作成できるように、Azure に拡張機能が実装されています。 詳細については、「チュートリアル: 自動化を使用してSQL Server用に Azure Active Directory 管理者を設定する」を参照してください。

  • Azure AD 認証を実行するには、SQL Serverが Azure AD に対してクエリを実行できる必要があり、認証に使用できる Azure AD アプリの登録が必要です。 また、アプリの登録では、SQL Server で実行されるクエリに対するいくつかのアクセス許可も必要です。

  • SQL Server では、この認証に証明書が使用され、証明書は Azure Key Vault (AKV) に格納されます。 Azure Arc エージェントでは、証明書が SQL Server インスタンス ホストにダウンロードされます。

警告

Azure AD によって認証された接続は常に暗号化されます。 SQL Serverが自己署名証明書を使用している場合は、接続文字列に を追加trust server cert = trueする必要があります。 SQL Serverと Windows で認証された接続では暗号化は必要ありませんが、推奨されます。

Azure AD アプリケーションを作成して登録する

  1. Azure portal に移動し、[Azure Active Directory]>[アプリの登録]>[新規登録] の順に選択します。
    1. 名前を指定します。次の例では、SQLServerCTP1を使用しています。
    2. [サポートされているアカウントの種類] を選択し、[この組織のディレクトリ内のアカウントのみ] を使用します
    3. リダイレクト URI を設定しない
    4. [登録] を選択します

次のアプリケーションの登録を参照してください。

Azure portalでのアプリケーションの登録のスクリーンショット。

アプリケーションへのアクセス許可の付与

新しく作成したアプリケーションを選択し、左側のメニューで、[API のアクセス許可] を選択します。

  1. [アクセス許可の追加]>[Microsoft Graph]>[アプリケーションのアクセス許可] の順に選択します

    1. [Directory.Read.All] をオンにします
    2. [アクセス許可の追加] を選択する
  2. [アクセス許可の追加]>[Microsoft Graph]>[委任されたアクセス許可] の順に選択します

    1. [Application.Read.All] をオンにします
    2. [Directory.AccessAsUser.All] をオンにします
    3. [Group.Read.All] をオンにします
    4. [User.Read.All] をオンにします
    5. [アクセス許可の追加] を選択する
  3. [管理者の同意の付与] を選択します

Azure portalのアプリケーションのアクセス許可のスクリーンショット。

注意

上記のアクセス許可に管理者の同意を付与するには、お使いのアカウントに Azure AD 全体管理者または特権ロール管理者のロールが必要です。

証明書を作成して割り当てる

  1. Azure portal に移動し、[キー コンテナー] を選択し、使用するキー コンテナーを選択するか、新しいキー コンテナーを作成します。 [証明書]>[生成/インポート] の順に選択します

    1. [証明書の作成方法] で、[生成] を使用します。

    2. 証明書名とサブジェクトを追加します。

    3. 推奨される有効期間は最大 12 か月です。 残りの値は、既定値のままでかまいません。

    4. [作成] を選択します

    Azure portalでの証明書の作成のスクリーンショット。

    注意

    証明書が作成された後、それが無効として表示される場合があります。 サイトを更新すると、証明書が有効として表示されます。

  2. 新しい証明書に移動し、証明書の最新バージョンの行を選択します。 [CER 形式でダウンロード] を選択して、証明書の公開キーを保存します。

    証明書を表示およびダウンロードできるAzure portalの証明書のスクリーンショット。

    注意

    これは、SQL Server ホストではなく、 次の手順で Azure portal にアクセスするクライアントで行います。

  3. Azure portalで、上で作成したアプリの登録に移動し、[証明書] の一覧選択します

    1. [証明書のアップロード] を選択します。
    2. 最後の手順でダウンロードした公開キー (.cer ファイル) を選択します。
    3. [追加] を選択します。

    Azure portalの [証明書とシークレット] メニューのスクリーンショット。

  4. Azure portalで、証明書が格納されている Azure Key Vault インスタンスに移動し、[アクセス ポリシー] を選択します

    1. [アクセス ポリシーの追加] を選択します。

    2. [キーのアクセス許可] で、[0 件選択済み] を使用します。

    3. [ シークレットのアクセス許可] で、[ 取得一覧表示] を選択します。

    4. [ 証明書のアクセス許可] で、[ 取得一覧表示] を選択します。

    5. [プリンシパルの選択] で、SQL Server ホストのホスト名である Azure Arc インスタンスのアカウントを使用します。

    6. [追加][保存] の順に選択します。

      アクセス許可が確実に適用されるように、必ず [保存] を選択してください。 [ 追加] を選択した後は適用されません。 アクセス許可が保存されていることを確認するには、ブラウザー ウィンドウを更新し、Azure Arc インスタンスの行がまだ存在することを確認します。

    Azure portal内のキー コンテナーにアクセス ポリシーを追加するスクリーンショット。

Azure portal を使用して SQL Server の Azure AD 認証を構成する

Note

Azure CLIPowerShell、または ARM テンプレートを使用して、SQL Server用の Azure AD 管理者を設定できます。

  1. Azure portal に移動し、SQL [Server - Azure Arc] を選択し、SQL Server ホストのインスタンスを選択します。

  2. [プロパティ] メニューに移動して、[SQL Server - Azure Arc] リソースの状態を確認し、接続されているかどうかを確認します。 詳細については、「SQL Server - Azure Arc リソースを確認する」を参照してください。

  3. 左側の列で、[Azure Active Directory] を選択します。

  4. [管理の設定] を選択し、SQL Serverに管理者ログインとして追加されるアカウントを選択します。

  5. [カスタマー マネージド証明書][証明書の選択] をオンにします。

  6. [ 証明書の変更] を選択し、新しいウィンドウで前に作成した AKV インスタンスと証明書を選択します。

  7. [カスタマー マネージド アプリ登録] をオンにします。

  8. [アプリの登録の変更] を選択し、先ほど作成したアプリの登録を選択します。

  9. [保存] を選択します。 これにより、Arc サーバー エージェントに要求が送信されます。これにより、そのSQL Server インスタンスの Azure AD 認証が構成されます。

    Azure portalで Azure Active Directory 認証を設定するスクリーンショット。

    証明書をダウンロードして設定を構成するには、数分かかります。 Azure portal ですべてのパラメーターを設定し、[保存] を選択した後、メッセージ "SQL Server's Azure Arc agent is currently processing a request. Values below may be incorrect. Please wait until the agent is done before continuing" が表示される場合があります。 保存処理が Saved successfully で完了するまで待ってから Azure AD のログインを試みます。

    Azure Arc サーバー エージェントは、前のアクションが完了した後にのみ更新することができます。 つまり、最後の構成が完了する前に新しい Azure AD 構成を保存すると、失敗する可能性があります。 [保存] を選択したときに、メッセージ "拡張呼び出しが失敗しました" が表示された場合は、5 分待ってから、再度試してみてください。

    Azure AD 管理者ログインは に sys.server_principals一覧表示されますが、ロールの sysadmin 一部ではありません。 Azure AD 管理者にロールを sysadmin 付与するには、 sp_addsrvrolemember ストアド プロシージャを使用します。

    ALTER SERVER ROLE sysadmin ADD MEMBER [aadadmin@contoso.com]
    GO
    

    Note

    Azure AD 管理者ログインにロールが付与sysadminされると、Azure portalで Azure AD 管理者を変更しても、 としてsysadmin残っている以前のログインは削除されません。 ログインを削除するには、手動で削除する必要があります。

    SQL Server インスタンスの Azure AD 管理者の変更は、SQL Serverの Azure Arc エージェントでプロセスが完了すると、サーバーの再起動なしで行われます。 で新しい管理者を表示sys.server_principalsするには、SQL Server インスタンスを再起動する必要があります。それまでは、古い管理者が表示されます。 現在の Azure AD 管理者は、Azure portalで確認できます。

ログインとユーザーを作成する

SQL Server ホスト上の Azure Arc エージェントの操作が完了すると、ポータルの [Azure Active Directory] ペインで選択された管理者アカウントはsysadmin、SQL Server インスタンスの になります。 サインインするには、SSMSAzure Data Studio などの SQL Server クライアントを使用します。

注意

Azure AD 認証を使用して行われる SQL Server へのすべての接続には、暗号化された接続が必要です。 データベース管理者 (DBA) がサーバーに対して信頼された SSL/TLS 証明書を設定していない場合、ログインは、メッセージ "この証明書チェーンは、信頼されていない機関によって発行されました" で失敗する可能性があります。これを修正するには、クライアントによって信頼されている SSL/TLS 証明書を使用するように SQL Server インスタンスを構成するか、接続の詳細プロパティで [サーバー証明書を信頼する] を選択します。 詳細については、「データベース エンジンへの暗号化接続の有効化」を参照してください。

ログイン構文を作成する

Azure SQL Database および Azure SQL Managed Instance で Azure AD のログインとユーザーの作成に使用するものと同じ構文を SQL Server で使用できるようになりました。 ただし、SQL Serverでは、 または ALTER ANY USER アクセス許可を持つ任意のALTER ANY LOGINアカウントでこれを行うことができます。 これらのアクセス許可のいずれかを持つアカウントは、それぞれログインまたはユーザーを作成できます。 Azure AD ログインである必要はありません。

Azure AD アカウントのログインを作成するには、データベースで次の T-SQL コマンドを master 実行します。

CREATE LOGIN [principal name] FROM EXTERNAL PROVIDER;

ユーザーの場合、プリンシパル名を user@contoso.com 形式にする必要があります。 他のすべてのアカウントの種類では、テナント名は必要ありません。また、Azure AD グループ名またはアプリケーション名を使用する必要があります。

次に例をいくつか示します。

-- login creation for Azure AD user
CREATE LOGIN [user@contoso.com] FROM EXTERNAL PROVIDER;
GO
-- login creation for Azure AD group
CREATE LOGIN [my_group_name] FROM EXTERNAL PROVIDER;
GO
-- login creation for Azure AD application
CREATE LOGIN [my_app_name] FROM EXTERNAL PROVIDER;
GO

master データベース内の Azure AD ログインを一覧表示するには、次の T-SQL コマンドを実行します。

SELECT * FROM sys.server_principals;

sysadmin ロール (たとえば、admin@contoso.com) に Azure AD ユーザー メンバーシップを付与するには、master で次のコマンドを実行します。

CREATE LOGIN [admin@contoso.com] FROM EXTERNAL PROVIDER; 
GO
EXEC sp_addsrvrolemember @loginame='admin@contoso.com', @rolename='sysadmin';
GO

ストアド プロシージャはsp_addsrvrolemember、SQL Server sysadmin サーバー ロールのメンバーとして実行する必要があります。

ユーザー構文を作成する

Azure AD ユーザーは、Azure AD ログインを持つユーザーとして、または Azure AD 包含ユーザーとして作成できます。

ユーザーが存在する必要がある SQL Server データベース内の Azure AD ログインから Azure AD ユーザーを作成するには、次の構文を使用します。

CREATE USER [principal_name] FROM LOGIN [principal_name];

principal_name 構文は、ログインの場合と同じです。

次に例をいくつか示します。

-- for Azure AD user
CREATE USER [user@contoso.com] FROM LOGIN [user@contoso.com];
GO
-- for Azure AD group
CREATE USER [my_group_name] FROM LOGIN [my_group_name];
GO
-- for Azure AD application
CREATE USER [my_app_name] FROM LOGIN [my_app_name];
GO

ログインなしで Azure AD 包含ユーザーを作成するには、次の構文を実行できます。

CREATE USER [principal name] FROM EXTERNAL PROVIDER;

Azure AD ユーザーをグループまたはアプリケーションとして作成する場合、<principal name> として Azure AD グループ名または Azure AD アプリケーション名を使用します。

次に例をいくつか示します。

-- for Azure AD contained user
CREATE USER [user@contoso.com] FROM EXTERNAL PROVIDER;
GO
-- for Azure AD contained group
CREATE USER [my_group_name] FROM EXTERNAL PROVIDER;
GO
--for Azure AD contained application
CREATE USER [my_group_name] FROM EXTERNAL PROVIDER;
GO

データベース内に作成されたユーザーを一覧表示するには、次の T-SQL コマンドを実行します。

SELECT * FROM sys.database_principals;

データベース内で新しく作成されたユーザーには、既定で Connect アクセス許可のみが付与されます。 このユーザーに対する他の SQL Server アクセス許可はすべて、権限の許可者によって明示的に付与される必要があります。

Azure AD ゲスト アカウント

CREATE LOGIN および CREATE USER 構文は、ゲスト ユーザーもサポートします。 たとえば、testuser@outlook.comcontoso.com テナントに招待された場合、次の構文を使用して、ログインとして SQL Server に追加できます。 この例では、SQL Server で contoso.com に登録されているアカウントを使用する場合でも、outlook.com が提供されます。

次のセクションでは、ゲスト ユーザーを作成する例を示します。

存在するログインを使用してゲスト ユーザーを作成する

CREATE USER [testuser@outlook.com] FROM LOGIN [testuser@outlook.com];

ゲスト ユーザーを包含ユーザーとして作成する

CREATE USER [testuser@outlook.com] FROM EXTERNAL PROVIDER;

サポートされている認証方法を使用して接続する

SQL Server では、Azure AD 認証用として次の 4 つの認証方法がサポートされます。

  • Azure Active Directory パスワード
  • Azure Active Directory 統合
  • Multi-Factor Authentication で汎用の Azure Active Directory
  • Azure Active Directory のアクセス トークン

これらの方法のいずれかを使用して SQL Server インスタンスに接続します。 詳細については、「SQL Server の Azure Active Directory 認証」を参照してください。

SSMS を使用した認証の例

認証方法である Azure Active Directory - MFA を使用した SQL Server Management Studio (SSMS) 接続ページのスナップショットを次に示します。

[サーバーへの接続] ウィンドウを示す SSMS のスクリーンショット。

認証プロセス中に、ユーザーが作成されたデータベースを SSMS で明示的に指示する必要があります。 [オプション] [>接続プロパティ>] [データベースへの接続] を展開します。 database_name

Azure Active Directory - MFA によるユニバーサル認証方法の詳細については、「MFA を使用したユニバーサル」を参照してください。

Azure SQLの Azure AD 認証をサポートするSQL Server ツールは、SQL Server 2022 (16.x) でもサポートされています。

Azure AD パラメーターが格納されている場所

警告

Azure AD のパラメーターは Azure Arc エージェントによって構成されるので、手動で再構成する必要はありません。

Linux では、Azure Active Directory パラメーターは に mssql-conf格納されます。 Linux の Azure AD 構成オプションの詳細については、「mssql-conf ツールを使用してSQL Server on Linuxを構成する」を参照してください。

既知の問題

  • 証明書の更新は反映されません。
    • azure AD がSQL Server用に構成されると、SQL Serverで証明書を更新すると、Azure Arc リソースの Azure AD ペインが完全に伝達されない場合があります。 これにより、保存は成功しますが、古い値が表示されたままです。 証明書を更新するには、次の手順を行います。

      • [管理者の削除] を選択します。
      • [保存] を選択します。
      • [管理者の設定] を選択し、新しい証明書を使用して Azure AD 認証を再構成します。
      • [保存] を選択します。

関連項目