チュートリアル:SQL Server on Linux で Active Directory 認証を使用するTutorial: Use Active Directory authentication with SQL Server on Linux

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) - Linux適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) - Linux

このチュートリアルでは、Active Directory (AD) 認証 (統合認証とも呼ばれます) をサポートするように SQL ServerSQL Server on Linux を構成する方法について説明します。This tutorial explains how to configure SQL ServerSQL Server on Linux to support Active Directory (AD) authentication, also known as integrated authentication. 概要については、「SQL Server on Linux に対する Active Directory 認証」をご覧ください。For an overview, see Active Directory authentication for SQL Server on Linux.

このチュートリアルは、次のタスクで構成されています。This tutorial consists of the following tasks:

  • SQL ServerSQL Server ホストを AD ドメインに参加させるJoin SQL ServerSQL Server host to AD domain
  • SQL ServerSQL Server 用の AD ユーザーを作成し、SPN を設定するCreate AD user for SQL ServerSQL Server and set SPN
  • SQL ServerSQL Server サービスの keytab を構成するConfigure SQL ServerSQL Server service keytab
  • keytab ファイルをセキュリティで保護するSecure the keytab file
  • Kerberos 認証に keytab ファイルを使用するように SQL Server を構成するConfigure SQL Server to use the keytab file for Kerberos authentication
  • Transact-SQL で AD ベースのログインを作成するCreate AD-based logins in Transact-SQL
  • AD 認証を使用して SQL ServerSQL Server に接続するConnect to SQL ServerSQL Server using AD Authentication

前提条件Prerequisites

AD 認証を構成する前に、次のことを行う必要があります。Before you configure AD Authentication, you need to:

SQL ServerSQL Server ホストを AD ドメインに参加させるJoin SQL ServerSQL Server host to AD domain

SQL Server Linux ホストを Active Directory ドメイン コントローラーに参加させます。Join your SQL Server Linux host with an Active Directory domain controller. Active Directory ドメインに参加する方法については、「Linux ホスト上の SQL Server を Active Directory ドメインに参加させる」をご覧ください。For information on how to join an active directory domain, see Join SQL Server on a Linux host to an Active Directory domain.

SQL ServerSQL Server 用の AD ユーザー (または MSA) を作成して SPN を設定するCreate AD user (or MSA) for SQL ServerSQL Server and set SPN

注意

以下の手順では、完全修飾ドメイン名を使います。The following steps use your fully qualified domain name. Azure を使用している場合は、先に進む前に 作成する 必要があります。If you are on Azure, you must create one before you proceed.

  1. ドメイン コントローラーで New-ADUser PowerShell コマンドを実行して、有効期限がないパスワードを持つ新しい AD ユーザーを作成します。On your domain controller, run the New-ADUser PowerShell command to create a new AD user with a password that never expires. 次の例では mssql というアカウント名を使っていますが、任意のアカウント名にすることができます。The following example names the account mssql, but the account name can be anything you like. アカウントの新しいパスワードを入力するように求められます。You'll be prompted to enter a new password for the account.

    Import-Module ActiveDirectory
    
    New-ADUser mssql -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true
    

    注意

    SQL Server 専用の AD アカウントを使用して、SQL Server の資格情報が同じアカウントを使用する他のサービスと共有されないようにすることが、セキュリティのベスト プラクティスです。It is a security best practice to have a dedicated AD account for SQL Server, so that SQL Server's credentials aren't shared with other services using the same account. ただし、アカウントのパスワードがわかっている場合は、必要に応じて既存の AD アカウントを再利用できます (次のステップで keytab ファイルを生成するために必要です)。However, you can optionally reuse an existing AD account if you know the account's password (which is required to generate a keytab file in the next step). さらに、このアカウントは、ユーザー アカウントで 128 ビットおよび 256 ビットの Kerberos AES 暗号化 (msDS-SupportedEncryptionTypes 属性) をサポートする場合は有効にする必要があります。Additionally, the account should be enabled to support 128-bit and 256-bit Kerberos AES encryption (msDS-SupportedEncryptionTypes attribute) on the user account.

  2. setspn.exe ツールを使って、このアカウントの ServicePrincipalName (SPN) を設定します。Set the ServicePrincipalName (SPN) for this account using the setspn.exe tool. SPN は、次の例で指定したとおりに書式設定されている必要があります。The SPN must be formatted exactly as specified in the following example. SQL ServerSQL Server ホスト コンピューターの完全修飾ドメイン名は、SQL ServerSQL Server ホスト上で hostname --all-fqdns を実行することによって確認できます。You can find the fully qualified domain name of the SQL ServerSQL Server host machine by running hostname --all-fqdns on the SQL ServerSQL Server host. 別のポート番号を使うように SQL ServerSQL Server を構成している場合を除き、TCP ポートは 1433 にする必要があります。The TCP port should be 1433 unless you have configured SQL ServerSQL Server to use a different port number.

    setspn -A MSSQLSvc/<fully qualified domain name of host machine>:<tcp port> mssql
    setspn -A MSSQLSvc/<netbios name of the host machine>:<tcp port> mssql
    

    注意

    エラー Insufficient access rights が発生する場合は、ドメイン管理者に連絡して、このアカウントに SPN を設定するための十分なアクセス許可があることを確認してください。If you receive an error, Insufficient access rights, check with your domain administrator that you have sufficient permissions to set an SPN on this account. SPN の登録に使用されるアカウントには Write servicePrincipalName 権限が必要になります。The account that is used to register an SPN will need the Write servicePrincipalName permissions. 詳細については、「 Kerberos 接続用のサービス プリンシパル名の登録」を参照してください。For more information, see Register a Service Principal Name for Kerberos Connections.

    後で TCP ポートを変更する場合は、新しいポート番号を指定して setspn コマンドを再度実行する必要があります。If you change the TCP port in the future, you must run the setspn command again with the new port number. また、次のセクションの手順に従って、SQL Server サービスの keytab に新しい SPN を追加する必要があります。You also need to add the new SPN to the SQL Server service keytab by following the steps in the next section.

詳細については、「 Kerberos 接続用のサービス プリンシパル名の登録」を参照してください。For more information, see Register a Service Principal Name for Kerberos Connections.

SQL ServerSQL Server サービスの keytab を構成するConfigure SQL ServerSQL Server service keytab

Linux で SQL Server の AD 認証を構成するには、AD アカウント (MSA または AD ユーザー アカウント) と、前のセクションで作成された SPN が必要です。Configuring AD authentication for SQL Server on Linux requires an AD account (MSA or an AD user account) and the SPN created in the the previous section.

重要

AD アカウントのパスワードが変更された場合、または SPN が割り当てられているアカウントのパスワードが変更された場合は、新しいパスワードとキー バージョン番号 (KVNO) を使用して、keytab を更新する必要があります。If the password for the AD account is changed or the password for the account that the SPNs are assigned to is changed, you must update the keytab with the new password and Key Version Number (KVNO). 一部のサービスでは、パスワードが自動的にローテーションされる場合もあります。Some services might also rotate the passwords automatically. 問題のアカウントのパスワード ローテーション ポリシーを確認し、予期しないダウンタイムが発生しないように、スケジュールされたメンテナンス アクティビティと一致させます。Review any password rotation policies for the accounts in question and align them with scheduled maintenance activities to avoid unexpected downtime.

SPN の keytab エントリSPN keytab entries

  1. 前のステップで作成した AD アカウントのキー バージョン番号 (KVNO) を確認します。Check the Key Version Number (KVNO) for the AD account created in the previous step. 通常は 2 ですが、アカウントのパスワードを複数回変更した場合は、別の整数になることがあります。Usually it is 2, but it could be another integer if you changed the account's password multiple times. SQL Server のホスト コンピューターで、次のコマンドを実行します。On the SQL Server host machine, run the following commands:

    • 次の例では、user@CONTOSO.COM ドメインにあることを前提としています。The below examples assume the user is in the @CONTOSO.COM domain. ユーザーとドメイン名を自分のユーザーとドメイン名に変更します。Modify the user and domain name to your user and domain name.
    kinit user@CONTOSO.COM
    kvno user@CONTOSO.COM
    kvno MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM
    

    注意

    SPN がドメインに反映されるまでに数分かかる場合があります (特に、ドメインが大きい場合)。SPNs can take several minutes to propagate through your domain, especially if the domain is large. kvno: Server not found in Kerberos database while getting credentials for MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM というエラーが発生する場合は、数分待ってからもう一度やり直してください。If you receive the error, kvno: Server not found in Kerberos database while getting credentials for MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM, please wait a few minutes and try again.
    上記のコマンドは、サーバーが AD ドメインに参加している場合にのみ機能します。これについては前のセクションで説明しました。The above commands will only work if the server has been joined to an AD domain, which was covered in the previous section.

  2. ktpass を使用し、各 SPN の keytab エントリを追加します。その際、Windows コンピューターのコマンド プロンプトで次のコマンドを使用します。Using ktpass, add keytab entries for each SPN using the following commands on a Windows machine Command Prompt:

    • <DomainName>\<UserName> - MSA または AD ユーザー アカウントを指定できます<DomainName>\<UserName> - Could be an MSA or AD user account
    • @CONTOSO.COM - お使いのドメインの名前を使用します@CONTOSO.COM - Use your domain name
    • /kvno <#> - <#> を前の手順で取得した KVNO に置換します/kvno <#> - Replace <#> with the KVNO obtained in an earlier step
    • <StrongPassword> - 強力なパスワードを使用します<StrongPassword> - Use a strong password
    ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>
    
    ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>
    
    ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>
    
    ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>
    
    ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>
    
    ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>
    

    注意

    上記のコマンドでは、AD 認証に AES と RC4 の両方の暗号化暗号を使用できます。The commands above allow both AES and RC4 encryption ciphers for AD authentication. RC4 は古い暗号化暗号です。より高度なセキュリティが必要な場合、AES 暗号化暗号のみを使用して keytab エントリを作成することを選択できます。RC4 is an older encryption cipher and if a higher degree of security is required, you can choose to create the keytab entries with only the AES encryption cipher. 最後の 2 つの UserName エントリは小文字で指定する必要があります。そうしないと、許可認証に失敗する可能性があります。The last two UserName entries must be in lowercase, or the permssion authentication might fail.

  3. 上記のコマンドの実行後、mssql.keytab という名前の keytab ファイルが与えられるはずです。After executing the above command, you should have a keytab file named mssql.keytab. SQL Server コンピューターにあるフォルダー /var/opt/mssql/secrets にこのファイルをコピーします。Copy the file over to the SQL Server machine under the folder /var/opt/mssql/secrets.

  4. keytab ファイルをセキュリティで保護します。Secure the keytab file.

    この keytab ファイルにアクセスできるすべてのユーザーは、ドメインで SQL Server を偽装できるので、mssql アカウントのみに読み取りアクセス権が付与されるように、ファイルへのアクセスを制限する必要があります。Anyone with access to this keytab file can impersonate SQL Server on the domain, so make sure you restrict access to the file such that only the mssql account has read access:

    sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab
    sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab
    
  5. 次の構成オプションを mssql-conf ツールで設定し、keytab ファイルにアクセスするときに使用するアカウントを指定する必要があります。The following configuration option needs to be set with the mssql-conf tool to specify the account to be used while accessing the keytab file.

    sudo mssql-conf set network.privilegedadaccount <username>
    

    注意

    ユーザー名のみを含め、domainname\username や username@domain は含めません。Only include the username and not domainname\username or username@domain. SQL Server の内部では、このユーザー名と共に必須となるドメイン名が使用時に追加されます。SQL Server internally adds domain name as required along with this username when used.

  6. 次の手順を使用して、Kerberos 認証用の keytab ファイルを使って開始するように SQL Server を構成します。Use the following steps to configure SQL Server to start using the keytab file for Kerberos authentication.

    sudo mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    sudo systemctl restart mssql-server
    

    ヒント

    必要に応じて、パフォーマンスを向上させるため、ドメイン コントローラーへの UDP 接続を無効にします。Optionally, disable UDP connections to the domain controller to improve performance. 多くの場合、ドメイン コントローラーに接続するときは UDP 接続が常に失敗するので、UDP の呼び出しをスキップするように /etc/krb5.conf の構成オプションを設定できます。In many cases, UDP connections consistently fail when connecting to a domain controller, so you can set config options in /etc/krb5.conf to skip UDP calls. /etc/krb5.conf を編集して、次のオプションを設定します。Edit /etc/krb5.conf and set the following options:

    /etc/krb5.conf
    [libdefaults]
    udp_preference_limit=0
    

この時点で、SQL Server で AD ベースのログインを使用できるようになります。At this point, you are ready to use AD-based logins in SQL Server.

Transact-SQL で AD ベースのログインを作成するCreate AD-based logins in Transact-SQL

  1. SQL Server に接続し、AD ベースの新しいログインを作成します。Connect to SQL Server and create a new, AD-based login:

    CREATE LOGIN [CONTOSO\user] FROM WINDOWS;
    
  2. sys.server_principals システム カタログ ビューにログインが表示されていることを確認します。Verify that the login is now listed in the sys.server_principals system catalog view:

    SELECT name FROM sys.server_principals;
    

AD 認証を使用して SQL Server に接続するConnect to SQL Server using AD Authentication

ドメイン資格情報を使用してクライアント コンピューターにログインします。Log in to a client machine using your domain credentials. AD 認証を使用してパスワードを再入力することなく SQL Server に接続できるようになります。Now you can connect to SQL Server without reentering your password by using AD Authentication. AD グループに対するログインを作成した場合は、そのグループのメンバーであるすべての AD ユーザーが、同じ方法で接続できます。If you create a login for an AD group, any AD user who is a member of that group can connect in the same way.

クライアントで AD 認証を使用するための特定の接続文字列パラメーターは、使用しているドライバーによって異なります。The specific connection string parameter for clients to use AD Authentication depends on which driver you are using. 次のセクションの例を検討してください。Consider the examples in the following sections.

ドメインに参加している Linux クライアントでの sqlcmdsqlcmd on a domain-joined Linux client

ssh とドメイン資格情報を使用して、ドメインに参加している Linux クライアントにログインします。Log in to a domain-joined Linux client using ssh and your domain credentials:

ssh -l user@contoso.com client.contoso.com

mssql-tools パッケージがインストールされていることを確認した後、資格情報を指定せずに sqlcmd を使用して接続します。Make sure you've installed the mssql-tools package, then connect using sqlcmd without specifying any credentials:

sqlcmd -S mssql-host.contoso.com

SQL Windows とは異なり、Kerberos 認証は SQL Linux のローカル接続で動作します。Different from SQL Windows, Kerberos authentication works for local connection in SQL Linux. ただし、SQL Linux ホストの FQDN を指定する必要があります。'.'、'localhost'、'127.0.0.1' に接続しようとしても AD 認証は機能しません。However, you still need to provide the FQDN of the SQL Linux host, and AD Authentication will not work if you attempt to connect to '.' ,'localhost','127.0.0.1',etc.

ドメインに参加している Windows クライアントでの SSMSSSMS on a domain-joined Windows client

ドメイン資格情報を使用して、ドメインに参加している Windows クライアントにログインします。Log in to a domain-joined Windows client using your domain credentials. SQL Server Management Studio がインストールされていることを確認した後、 [サーバーへの接続] ダイアログで [Windows 認証] を指定して、SQL Server インスタンス (例 : mssql-host.contoso.com) に接続します。Make sure SQL Server Management Studio is installed, then connect to your SQL Server instance (for example, mssql-host.contoso.com) by specifying Windows Authentication in the Connect to Server dialog.

他のクライアント ドライバーを使用した AD 認証AD Authentication using other client drivers

次の表では、他のクライアント ドライバーに関する推奨事項について説明します。The following table describes recommendations for other client drivers:

クライアント ドライバーClient driver 推奨Recommendation
JDBCJDBC Kerberos 統合認証を使用して、SQL Server に接続します。Use Kerberos Integrated Authentication to Connect SQL Server.
ODBCODBC 統合認証を使用します。Use Integrated Authentication.
ADO.NETADO.NET 接続文字列の構文。Connection String Syntax.

その他の構成オプションAdditional configuration options

PBISVASCentrify などのサードパーティ製ユーティリティを使って Linux ホストを AD ドメインに参加させていて、SQL Server で強制的に openldap ライブラリを直接使いたい場合は、次のように mssql-confdisablesssd オプションを構成できます。If you are using third-party utilities such as PBIS, VAS, or Centrify to join the Linux host to AD domain and you would like to force SQL server in using the openldap library directly, you can configure the disablesssd option with mssql-conf as follows:

sudo mssql-conf set network.disablesssd true
systemctl restart mssql-server

注意

realmd のように SSSD が設定されるユーティリティもありますが、PBIS、VAS、Centrify などの他のツールでは SSSD は設定されません。There are utilities such as realmd which set up SSSD, while other tools such as PBIS, VAS and Centrify do not setup SSSD. AD ドメインへの参加に使用しているユーティリティで SSSD が設定されない場合は、disablesssd オプションを true に設定することをお勧めします。If the utility used to join AD domain does not setup SSSD, it is recommended to configure disablesssd option to true. openldap メカニズムにフォールバックする前に、SQL Server では AD に対して SSSD の使用が試みられるので、必須ではありませんが、SQL Server で SSSD メカニズムをバイパスして openldap が直接呼び出されるように構成すると、パフォーマンスが向上します。While it is not required as SQL Server will attempt to use SSSD for AD before falling back to openldap mechanism, it would be more performant to configure it so SQL Server makes openldap calls directly bypassing the SSSD mechanism.

ドメイン コントローラーで LDAPS がサポートされている場合は、SQL Server からドメイン コントローラーへのすべての接続で LDAPS が使用されるように強制することができます。If your domain controller supports LDAPS, you can force all connections from SQL Server to the domain controllers to be over LDAPS. クライアントが LDAPS 経由でドメイン コントローラーに接続できることを確認するには、Bash コマンド ldapsearch -H ldaps://contoso.com:3269 を実行します。To check your client can contact the domain controller over ldaps, run the following bash command, ldapsearch -H ldaps://contoso.com:3269. LDAPS のみを使うように SQL Server を設定するには、以下を実行します。To set SQL Server to only use LDAPS, run the following:

sudo mssql-conf set network.forcesecureldap true
systemctl restart mssql-server

これにより、ホストでの AD ドメイン参加が SSSD パッケージによって行われていて、disablesssd が true に設定されていない場合は、SSSD で LDAPS が使用されます。This will use LDAPS over SSSD if AD domain join on host was done via SSSD package and disablesssd is not set to true. disablesssd が true に設定されていて、forcesecureldap が true に設定されている場合は、SQL Server によって行われる openldap ライブラリの呼び出しで LDAPS プロトコルが使われます。If disablesssd is set to true along with forcesecureldap being set to true, then it will use LDAPS protocol over openldap library calls made by SQL Server.

SQL Server 2017 CU14 以降Post SQL Server 2017 CU14

SQL Server 2017 CU14 以降では、SQL Server で、AD ドメイン コントローラーへの参加にサードパーティのプロバイダーが使われていて、disablesssd を true に設定することによって一般的な AD 参照に openldap の呼び出しが使われるように構成されている場合は、enablekdcfromkrb5 オプションを使うことにより、KDC サーバーの逆引き DNS 参照ではなく、krb5 ライブラリを使って KDC 参照を行うように、SQL Server を強制することができます。Starting with SQL Server 2017 CU14, if SQL Server was joined to an AD domain controller using third-party providers and is configured to use openldap calls for general AD lookup by setting disablesssd to true, you can also use enablekdcfromkrb5 option to force SQL Server to use krb5 library for KDC lookup instead of reverse DNS lookup for KDC server.

これは、SQL Server が通信を試みるドメイン コントローラーを手動で構成する場合に便利です。This may be useful for the scenario where you want to manually configure the domain controllers that SQL Server attempts to communicate with. また、krb5.conf で KDC リストを使うことにより、openldap ライブラリのメカニズムを使用します。And you use the openldap library mechanism by using the KDC list in krb5.conf.

最初に、disablesssdenablekdcfromkrb5conf を true に設定した後、SQL Server を再起動します。First, set disablesssd and enablekdcfromkrb5conf to true and then restart SQL Server:

sudo mssql-conf set network.disablesssd true
sudo mssql-conf set network.enablekdcfromkrb5conf true
systemctl restart mssql-server

次に、 /etc/krb5.conf で KDC リストを次のように構成します。Then configure the KDC list in /etc/krb5.conf as follows:

[realms]
CONTOSO.COM = {
  kdc = dcWithGC1.contoso.com
  kdc = dcWithGC2.contoso.com
}

注意

推奨されませんが、Linux ホストをドメインに参加させるときに SSSD が設定される realmd などのユーティリティを使用しながら、disablesssd を true に設定することで、SQL Server による Active Directory 関連の呼び出しに SSSD ではなく openldap の呼び出しが使われるようにすることができます。While it is not recommended, it is possible to use utilities, such as realmd, that set up SSSD while joining the Linux host to the domain, while configuring disablesssd to true so that SQL Server uses openldap calls instead of SSSD for Active Directory related calls.

次のステップNext steps

このチュートリアルでは、SQL Server on Linux で Active Directory 認証を設定する方法について説明しました。In this tutorial, we walked through how to set up Active Directory authentication with SQL Server on Linux. 以下の方法を学習しました。You learned how to:

  • SQL ServerSQL Server ホストを AD ドメインに参加させるJoin SQL ServerSQL Server host to AD domain
  • SQL ServerSQL Server 用の AD ユーザーを作成し、SPN を設定するCreate AD user for SQL ServerSQL Server and set SPN
  • SQL ServerSQL Server サービスの keytab を構成するConfigure SQL ServerSQL Server service keytab
  • Transact-SQL で AD ベースのログインを作成するCreate AD-based logins in Transact-SQL
  • AD 認証を使用して SQL ServerSQL Server に接続するConnect to SQL ServerSQL Server using AD Authentication

次に、SQL Server on Linux の他のセキュリティ シナリオを調べます。Next, explore other security scenarios for SQL Server on Linux.