チュートリアル: adutil を使用して SQL Server on Linux で Active Directory 認証を構成する

適用対象: SQL Server - Linux

このチュートリアルでは、adutil を使用して SQL Server on Linux 用に Windows Active Directory 認証を構成する方法について説明します。 ktpass を使用して Active Directory 認証を構成する別の方法については、「チュートリアル:SQL Server on Linux で Active Directory 認証を使用する」をご覧ください。

このチュートリアルは、次のタスクで構成されています。

  • adutil をインストールする
  • Linux マシンを Active Directory ドメインに参加させる
  • SQL Server 用の Active Directory ユーザーを作成し、adutil ツールを使用してサービス プリンシパル名 (SPN) を設定する
  • SQL Server サービスの keytab (キー テーブル) ファイルを作成する
  • keytab ファイルを使用するように SQL Server を構成する
  • Transact-SQL を使用して Active Directory ベースの SQL Server ログインを作成する
  • Active Directory 認証を使用して SQL Server に接続する

前提条件

Active Directory 認証を構成する前に、次のものが必要です。

  • ご利用のネットワークで Active Directory ドメイン サービスを実行している Windows ドメイン コントローラー。
  • ドメイン参加済みのホスト コンピューターにインストールされている adutil ツール。

ドメイン マシンの準備

Linux ホストの IP アドレスに対する転送ホスト (A) エントリが、Active Directory に追加されていることを確認します。 このチュートリアルでは、sql1 ホスト マシンの IP アドレスは 10.0.0.10 です。 次の例では、Active Directory に転送ホスト エントリを追加します。 このエントリにより、ユーザーが sql1.contoso.com に接続すると、適切なホストに到達することが保証されます。

ホストレコードの追加のスクリーンショット。

このチュートリアルでは、3 つの仮想マシン (VM) がある Azure の環境を使用しています。 1 つ目の VM は adVM.contoso.com という名前の Windows Server コンピューターであり、ドメイン名 contoso.com のドメイン コントローラー (DC) として実行されます。 2 つ目の VM は、Windows 10 を実行している winbox という名前のクライアント マシンであり、SQL Server Management Studio (SSMS) がインストールされています。 3 つ目のマシンは、sql1 という名前の Ubuntu 18.04 LTS マシンで、SQL Server がホストされています。

Linux ホスト マシンを Active Directory ドメインに参加させる

sql1 を Active Directory ドメインに参加させるには、「Linux ホスト上の SQL Server を Active Directory ドメインに参加させる」をご覧ください。

adutil をインストールする

adutil ツールをインストールするには、前のステップでドメインに追加したホスト コンピューター上で、「adutil の概要 - Active Directory ユーティリティ」に説明されている手順を行ってください。

adutil を使用して SQL Server 用の Active Directory ユーザーを作成し、サービス プリンシパル名 (SPN) を設定する

  1. kinit コマンドを使用して、Kerberos TGT (Ticket Granting Ticket) を取得または更新します。 kinit コマンドには特権アカウントを使用する必要があります。ホスト コンピューターは既にドメインに参加しているはずです。 このアカウントには、ドメインへの接続、およびドメイン内にアカウントと SPN の作成を行うためのアクセス許可が必要です。

    このサンプル スクリプトでは、privilegeduser@CONTOSO.COM という特権ユーザーがドメイン コントローラーに既に作成されています。

    kinit privilegeduser@CONTOSO.COM
    
  2. adutil を使用して、SQL Server によって特権 Active Directory アカウントになる新しいユーザーを作成します。

    パスワードは、次の 3 とおりの方法で指定できます。 これらのメソッドを複数使用する場合、それらの優先順序は次のようになります。

    • パスワード フラグの使用: --password <password>
    • 環境変数内で: ADUTIL_ACCOUNT_PWD
    • コマンド ライン プロンプトでの対話型入力

    環境変数または対話型の入力方式は、パスワード フラグよりも安全です。

    adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password 'P@ssw0rd'
    

    上で示したように識別名 (--distname) を使ってアカウントの名前を指定することも、組織単位 (OU) 名を使うこともできます。 両方を指定した場合は、OU 名 (--ou) が識別名より優先されます。 次のコマンドを実行して詳細を確認できます。

    adutil user create --help
    
  3. 前に作成したプリンシパルに SPN を登録します。 コンピューターの完全修飾ドメイン名 (FQDN) を使用する必要があります。 このチュートリアルでは、SQL Server の既定のポート 1433 を使用しています。 ポート番号は異なる場合があります。

    adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 1433
    
    • kinit アカウントに対する十分な特権があれば、addauto によって SPN が自動的に作成されます。
    • -n: SPN を割り当てるアカウントの名前。
    • -s:SPN の生成に使用するサービス名。 この場合、SQL Server サービス用であるため、サービス名は MSSQLSvc です。
    • -H:SPN の生成に使用するホスト名。 指定しないと、ローカル ホストの FQDN が使われます。 この場合、ホスト名は sql1 であり、FQDN は sql1.contoso.com です。
    • -p:SPN の生成に使用するポート。 指定しないと、ポートなしで SPN が生成されます。 この場合、SQL Server が既定のポート 1433 をリッスンしている場合にのみ、SQL 接続は機能します。

mssql-conf を使用して SQL Server サービスの keytab ファイルを作成する

adutil をインストールして mssql-conf と統合し、mssql-conf を直接使って keytab を作成および構成できます。 これは、SQL Server サービスの keytab ファイルを作成するための推奨される方法です。 それ以外の方法としては、手動で SQL Server サービスの keytab ファイルを作成できます。

前提条件

  1. /var/opt/mssql/mssql.conf ファイルが root ではなく mssql によって所有されていることを確認します。 そうでない場合は、sudo を使って mssql-conf コマンドを実行する必要があります。

  2. ドメイン コントローラーで、network.privilegedadaccount アカウント (これらの例では sqluser@CONTOSO.COM) の Active Directory の設定に移動し、[アカウント] タブの [アカウント オプション] セクションで次のオプションを有効にします。

    • [このアカウントで Kerberos AES 128 ビット暗号化をサポートする]
    • [このアカウントで Kerberos AES 256 ビット暗号化をサポートする]

keytab ファイルを作成する

ユーザーと SPN を作成したら、次の手順のようにして keytab を作成できます。

  1. mssql ユーザーに切り替えます。

    su mssql
    
  2. kinit コマンドを使って Active Directory ユーザーとしてサインインします。

    kinit privilegeduser@CONTOSO.COM
    
  3. keytab ファイルを作成します。

    /opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
    

    Active Directory の新しい構成を適用するため、SQL Server サービスの再起動を求められます。これは、次のセクションで行うことができます。

  4. keytab が正しいエントリで作成されていることを確認します。

    klist -kte /var/opt/mssql/secrets/mssql.keytab
    

    次の例のような出力が表示されます。

    keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       4 12/30/2021 14:02:08 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
    

    /var/opt/mssql/mssql.conf ファイルが mssql によって所有されていない場合は、前の手順に従って network.kerberoskeytabfilenetwork.privilegedadaccount の値を設定するように、mssql-conf を構成する必要があります。 パスワードを求められたら入力します。

    /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    /opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser
    
  5. 構成を検証して、Active Directory 認証が問題なく動作することを確認します。

    /opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytab
    

    次の例のような出力が表示されます。

    Detected Configuration:
    Default Realm: CONTOSO.COM
    Keytab: /var/opt/mssql/secrets/mssql.keytab
    Reverse DNS Result: sql1.contoso.com
    SQL Server Port: 1433
    Detected SPNs (SPN, KVNO):
    (MSSQLSvc/sql1.CONTOSO.COM:1433, 4)
    (MSSQLSvc/sql1.CONTOSO.COM, 4)
    (MSSQLSvc/sql1:1433, 4)
    (MSSQLSvc/sql1, 4)
    Privileged Account (Name, KVNO):
    (sqluser, 4)
    

手動で SQL Server サービスの keytab ファイルを作成する

adutil をインストールして mssql-conf と統合した場合は、「mssql-conf を使用して SQL Server サービスの keytab ファイルを作成する」に進むことができます。

  1. 前に作成した 4 つの各 SPN に対するエントリと、ユーザー用の 1 つが含まれる、keytab ファイルを作成します。

    adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H sql1.contoso.com --password 'P@ssw0rd' -s MSSQLSvc
    

    使用できるコマンド ライン オプションは次のとおりです。

    • -k: mssql.keytab ファイルが作成されるパス。 前の例では、ディレクトリ /var/opt/mssql/secrets/ が既にホスト上に存在している必要があります。
    • -p:SPN の生成に使用するポート。 指定しないと、ポートなしで SPN が生成されます。
    • -H:SPN の生成に使用するホスト名。 指定しないと、ローカル ホストの FQDN が使われます。 この場合、ホスト名は sql1 であり、FQDN は sql1.contoso.com です。
    • -s:SPN の生成に使用するサービス名。 この例では、SQL Server サービス名は MSSQLSvc です。
    • --password: 前に作成した特権 Active Directory ユーザー アカウントのパスワード。
    • -e または --enctype: keytab エントリの暗号化の種類。 コンマで区切られた値のリストを使用します。 指定しないと、対話形式のプロンプトが表示されます。

    ご利用のホストとドメインで暗号化の種類がサポートされている限り、複数の暗号化の種類を選択できます。 この例では、aes256-cts-hmac-sha1-96aes128-cts-hmac-sha1-96 を選択できます。 ただし、arcfour-hmac については、暗号化が弱いので、実稼働環境での使用は避けるべきです。

    入力を求められることなく暗号化の種類を選択したい場合は、前のコマンドで -e 引数を使って暗号化の種類の選択を指定できます。 adutil keytab オプションの詳細なヘルプについては、次のコマンドを実行します。

    adutil keytab createauto --help
    
  2. SQL Server が Active Directory への接続に使用するプリンシパル名とパスワードのエントリを、keytab に追加します。

    adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'
    
    • -k: mssql.keytab ファイルを作成するパス。
    • -p:keytab に追加するプリンシパル。

    adutil keytab [ create | autocreate ] では、以前のファイルは上書きされません。既に存在する場合は、ファイルに追加されるだけです。

  3. 作成された keytab が mssql ユーザーによって所有されていること、そのファイルへの読み書きアクセス権を mssql ユーザーのみが持っていることを確認します。 chownchmod コマンドは、次のように実行できます。

    chown mssql /var/opt/mssql/secrets/mssql.keytab
    chmod 440 /var/opt/mssql/secrets/mssql.keytab
    

keytab を使用するように SQL Server を構成する

次のコマンドを実行して、前のステップで作成した keytab を使うように SQL Server を構成し、特権 Active Directory アカウントを前に作成したユーザーとして設定します。 この例では、ユーザー名は sqluser です。

/opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
/opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser

SQL Server を再起動する

次のコマンドを実行し、SQL Server サービスを有効にして再起動します。

sudo systemctl restart mssql-server

Transact-SQL で Active Directory ベースの SQL Server ログインを作成する

SQL Server に接続し、次のコマンドを実行して、ログインを作成し、それが存在することを確認します。

CREATE LOGIN [contoso\privilegeduser] FROM WINDOWS;
SELECT name FROM sys.server_principals;

Active Directory 認証を使用して SQL Server に接続する

SSMS または Azure Data Studio を使用して接続するには、Windows 資格情報を使用して SQL Server にログインします。

また、sqlcmd などのツールを使用し、Windows 認証を使用して SQL Server に接続することもできます。

sqlcmd -E -S 'sql1.contoso.com'