Linux ホスト上の SQL Server を Active Directory ドメインに参加させる

適用対象:Linux 上の SQL Server

この記事では、SQL Serverを搭載したLinuxホストをActive Directoryドメインに接続する方法について一般的なガイダンスを提供します。 組み込みの SSSD パッケージを使用する方法と、第三者の Active Directory プロバイダーを使用する方法の 2 つがあります。 サードパーティドメインジョイン製品の例としては、PowerBroker Identity Services(PBIS)、One Identity Safeguard Authentication Services(VAS)、Centrifyがあります。

このガイドには、Active Directory の構成を確認する手順が含まれます。 ただし、第三者のユーティリティを使用してコンピューターをドメインに参加させる方法については説明しません。

Note

最新版の Ubuntu、RHEL、または SLES で Active Directory を構成する方法については、「チュートリアル: adutil を使用して SQL Server on Linux で Active Directory 認証を構成する」を参照してください。

前提条件

Active Directory認証を設定する前に、ネットワーク上でWindows ServerをActive Directoryドメインコントローラーとして起動させる必要があります。 その後、SQL Serverを動かすLinuxホストをActive Directoryドメインに接続します。

この記事で説明されている手順の例はガイダンスのみを目的としており、Ubuntu 16.04、Red Hat Enterprise Linux (RHEL) 7.x、および SUSE Linux Enterprise Server (SLES) 12 オペレーティング システムを参照しています。 実際の手順は環境やOSのバージョンによって少し異なる場合があります。 例えば、Ubuntu 18.04は netplan を使用し、RHEL 8.xは nmcli などのツールを使ってネットワーク管理や設定を行います。 特定のツール、構成、カスタマイズ、および必要なトラブルシューティングについては、環境のシステム管理者とドメイン管理者に問い合わせる必要があります。

Note

SQL Server 2025 (17.x) 以降、SUSE Linux Enterprise Server (SLES) はサポートされていません。

逆引き DNS (rRDNS)

Windows Server を実行しているコンピューターをドメイン コントローラーとして設定した場合、既定では rRDNS ゾーンが存在しない可能性があります。 ドメイン コントローラーと、SQL Server を実行する Linux マシンの IP アドレスの両方に適用可能な rRDNS ゾーンが必ず存在するようにしてください。

また、ドメインコントローラーを示すPTRレコードが存在することも確認してください。

ドメイン コントローラーへの接続を確認する

ドメインの短い名前と完全修飾名の両方を使用し、ドメイン コントローラーのホスト名を使って、ドメイン コントローラーに接続できることを確認します。 ドメインコントローラーのIPアドレスも、ドメインコントローラーの完全限定ドメイン名(FQDN)に解決されるべきです。

ping contoso
ping contoso.com
ping dc1.contoso.com
nslookup <IP address of dc1.contoso.com>

Tip

このチュートリアルでは、ドメイン名と領域名の例として、それぞれ contoso.comと CONTOSO.COMを使用します。 また、ドメイン コントローラーの完全修飾ドメイン名の例として、DC1.CONTOSO.COM も使用します。 これらの名前はご自身の値に置き換える必要があります。

適切なドメイン名解決を確保するには、名前チェック中に不一致が見つかった場合は、 /etc/resolv.confファイルを更新することが重要です。 更新手順はディストリビューションによって異なります。そのため、正確なガイダンスを得るには、公式ドキュメントを参照することをお勧めします。 次のリストは、一部のディストリビューションとその主要なバージョンのリンクを示しています。

流通業 リファレンス記事
RHEL 8 /etc/resolv.conf を手動で構成する
RHEL 9 /etc/resolv.conf を手動で構成する
SLES 15 NETCONFIG_DNS_STATIC_SEARCHLISTとNETCONFIG_DNS_STATIC_SERVERSの設定
Ubuntu 名前解決セクション

目的は、ドメイン名の解決を容易にするために、ディストリビューションに合わせて /etc/resolv.conf を正しく構成することです。 たとえば、ドメインが contoso.com で、Active Directory IP アドレスが 10.0.0.4 の場合、ホストからの名前解決が確実に行われるように /etc/resolv.conf を適切に設定する必要があります。

cat /etc/resolv.conf

結果セットは次のとおりです。

# Generated by NetworkManager
search contoso.com com
nameserver 10.0.0.4

RHEL 7.x

  1. /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルを編集して、Active Directory ドメインがドメイン検索リストに含まれるようにします。 または、必要に応じて別のインターフェイス構成ファイルを編集します。

    sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
    

    出力は次の例のようになります。

    PEERDNS=no
    DNS1=<Domain controller IP address>
    DOMAIN="contoso.com com"
    
  2. このファイルを編集した後、ネットワーク サービスを再起動します。

    sudo systemctl restart network
    
  3. 次に、/etc/resolv.conf ファイルに次の例のような行が含まれていることを確認します。

    sudo vi /etc/resolv.conf
    

    出力は次の例のようになります。

    search contoso.com com
    nameserver <Domain controller IP address>
    
  4. それでもドメイン コントローラーに対して ping を実行できない場合は、ドメイン コントローラーの完全修飾ドメイン名と IP アドレスを検索します。 ドメイン名の例は DC1.CONTOSO.COMです。 次のエントリを /etc/hostsに追加します。

    sudo vi /etc/hosts
    

    出力は次の例のようになります。

    <IP address> DC1.CONTOSO.COM CONTOSO.COM CONTOSO
    

Active Directory ドメインに参加する

基本的な設定とドメインコントローラーとの接続を確認した後、SQL Serverを動かすLinuxホストをActive Directoryドメインに接続する2つの選択肢があります。

オプション 1: SSSD パッケージを使用して Active Directory ドメインに参加する

この方法は、SQL Serverを実行するLinuxホストをRealmdおよびsssdパッケージを使ってActive Directoryドメインに接続します。

これは、Linux ホストを Active Directory ドメイン コントローラーに参加させる場合に推奨される方法です。

最新の手順については、配布パートナーが提供する公式ドキュメントを参照してください。

流通業 リファレンス記事
RHEL 8 SSSD を使用した AD ドメインの検出と参加
RHEL 9 SSSD を使用した AD ドメインの検出と参加
SLES Windows ドメイン メンバーシップ を使用して Active Directory に参加する
Ubuntu Active Directory で SSSD を設定する方法

SQL Serverを搭載したLinuxホストをActive Directoryドメインに接続するには、以下の手順を用いてください:

  1. realmdを使ってホストマシンをActive Directoryドメインに結合してください。 まず、Linuxディストリビューションのパッケージマネージャーを使って、RealmdとKerberosクライアントパッケージの両方をSQL Server Linuxホストにインストールする必要があります:

    RHEL:

    sudo yum install realmd krb5-workstation
    

  1. Kerberos クライアント パッケージのインストール時に、領域名の入力を求められた場合は、ドメイン名を大文字で入力します。

  2. DNS が正しく構成されたことを確認した後、次のコマンドを実行してドメインに参加します。 新しいコンピューターをドメインに参加させるのに十分な特権を Active Directory に持っている Active Directory アカウントを使って、認証を行う必要があります。 このコマンドでは、Active Directory に新しいコンピューター アカウントが作成され、/etc/krb5.keytab ホスト keytab ファイルが作成され、/etc/sssd/sssd.conf でドメインが構成されて、/etc/krb5.conf が更新されます。

    realmd に問題があるため、まず、コンピューターのホスト名をコンピューター名ではなく、FQDN に設定します。 そうしないと、realmd によってコンピューターに必要なすべての SPN が作成されない可能性があり、DNS エントリが自動的に更新されません。これは、ドメイン コントローラーで動的 DNS 更新がサポートされている場合でも同様です。

    sudo hostname <old hostname>.contoso.com
    

    このコマンドを実行すると、 /etc/hostnameファイルに <old hostname>.contoso.comが含まれるはずです。

    sudo realm join contoso.com -U 'user@CONTOSO.COM' -v
    

    Successfully enrolled machine in realm というメッセージが表示されます。

    受け取る可能性のあるエラー メッセージとその解決方法を、次の表に示します。

    エラー メッセージ レコメンデーション
    Necessary packages are not installed realm join コマンドを再び実行する前に、お使いの Linux ディストリビューションのパッケージ マネージャーを使って、それらのパッケージをインストールします。
    Insufficient permissions to join the domain ドメイン管理者に連絡し、Linux コンピューターをドメインに参加させるのに十分なアクセス許可があることを確認します。
    KDC reply did not match expectations ユーザーに対して正しい領域名を指定していない可能性があります。 レルム名では大文字と小文字が区別され、通常は大文字で表記されます。realm discover contoso.com コマンドで確認できます。

    SQL Server では、ユーザー アカウントとグループをセキュリティ識別子 (SID) にマップするために、SSSD と NSS が使われます。 Active Directory ログインを正しく作成するには、SSSD が SQL Server 用に構成されて実行されている必要があります。 通常、これは realmd によってドメインへの参加の一環として自動的に行われますが、場合によってはこれを別途行う必要があります。

    詳しくは、SSSD を手動で構成する方法および NSS を SSSD で動作するように構成する方法を参照してください。

  3. ドメインからユーザーに関する情報を収集できるようになったこと、およびそのユーザーとして Kerberos チケットを取得できることを確認します。 次の例では、これのために id、kinit、および klist コマンドが使われています。

    SSSDがドメイン、ユーザーおよびグループのメンバーシップを解決できるかどうかを確認するために id を使います:

    id user@contoso.com
    

    出力にはドメインユーザーのユーザーID、グループID、グループメンバーシップが示されるべきです:

    uid=1348601103(user@contoso.com) gid=1348600513(domain group@contoso.com) groups=1348600513(domain group@contoso.com)
    

    ドメインユーザーに対してKerberosチケットをリクエストするには kinit を使用します:

    kinit user@CONTOSO.COM
    

    コマンドはドメインユーザーのパスワードを入力するよう促されるはずです:

    Password for user@CONTOSO.COM:
    

    klistを使ってケルベロスのチケットを確認してください:

    klist
    

    出力はドメインユーザーをデフォルトのプリンシパルとして識別すべきです:

    Ticket cache: FILE:/tmp/krb5cc_1000
    Default principal: user@CONTOSO.COM
    

    id user@contoso.com で No such userが返される場合は、sudo systemctl status sssd コマンドを実行して、SSSD サービスが正常に開始されていることを確認します。 サービスが実行されているのにエラーが表示される場合は、SSSD の詳細ログを有効にしてみます。 詳しくは、SSSD のトラブルシューティングに関する Red Hat のドキュメントを参照してください。

    kinit user@CONTOSO.COM から KDC reply didn't match expectations while getting initial credentialsが返される場合は、領域を大文字で指定したことを確認します。

詳細については、 SSSDを使ったADドメインの発見と参加に関するRed Hatのドキュメントをご覧ください。

オプション2:サードパーティ製のActive Directoryプロバイダーユーティリティを使用する

PBIS、VAS、Centrify などの第三者製ユーティリティを使用できます。 この記事では、個々のユーティリティの手順については説明しません。 先にこれらのユーティリティのいずれかを使って、SQL Serverを動かすLinuxホストをドメインに接続しなければ進めません。

SQL Serverは、Active Directory関連のクエリに対してサードパーティのインテグレーターのコードやライブラリを使用しません。 SQL Server では常に、このセットアップでの OpenLDAP ライブラリの直接呼び出しを使って、Active Directory のクエリが行われます。 サードパーティのインテグレータはLinuxホストをActive Directoryドメインに結合するためにのみ使用されており、SQL Serverはこれらのユーティリティと直接通信していません。

Important

SQL mssql-conf network.disablesssdの使用に関する記事の「追加の構成オプション」セクションの構成オプションの使用に関する推奨事項を参照してください。

/etc/krb5.conf が正しく構成されていることを確認します。 ほとんどの第三者製 Active Directory プロバイダーでは、この構成は自動的に行われます。 ただし、後で問題が発生するのを防ぐため、/etc/krb5.conf で次の値を確認してください。

sudo vi /etc/krb5.conf

出力は次の例のようになります。

[libdefaults]
default_realm = CONTOSO.COM

[realms]
CONTOSO.COM = {
}

[domain_realm]
contoso.com = CONTOSO.COM
.contoso.com = CONTOSO.COM

逆引き DNS が正しく構成されていることを確認する

次のコマンドでは、SQL Server が実行されているホストの完全修飾ドメイン名 (FQDN) が返されます。 たとえば SqlHost.contoso.com です。

host <IP address of SQL Server host>

このコマンドの出力は、<reversed IP address>.in-addr.arpa domain name pointer SqlHost.contoso.com のようになる必要があります。 もしこのコマンドでホストのFQDNが返ってこなかったり、FQDNが間違っている場合は、SQL Serverを実行するLinuxホストのリバースDNSエントリをDNSサーバーに追加してください。

次のステップ

この記事では、SQL ServerをActive Directory認証で動かすLinuxホストを設定しました。 Active Directory アカウントをサポートするための SQL Server on Linux の構成を終了するには、以下の手順に従ってください。