適用対象:Linux 上の SQL Server
このチュートリアルでは、Active Directory 認証 (統合認証とも呼ばれます) をサポートするように SQL Server on Linux を構成する方法について説明します。 概要については、「SQL Server on Linux に対する Active Directory 認証」をご覧ください。
このチュートリアルは、次のタスクで構成されています。
- SQL ServerホストをActive Directoryドメインに加入する
- SQL Server用のActive Directoryユーザーを作成し、SPNを設定します
- SQL Server サービスの keytab を構成する
- keytab ファイルをセキュリティで保護する
- Kerberos 認証に keytab ファイルを使用するように SQL Server を構成する
- Transact-SQL で Active Directory ベースのログインを作成する
- Active Directory 認証を使用して SQL Server に接続する
前提条件
Active Directory認証を設定する前に、以下のことをする必要があります:
- ネットワーク上でActive Directoryドメインコントローラー(Windows)を設定しましょう
- SQL Server をインストールする
Note
SQL Server 2025 (17.x) 以降、SUSE Linux Enterprise Server (SLES) はサポートされていません。
SQL Server ホストを Active Directory ドメインに参加させる
SQL ServerのLinuxホストをActive Directoryドメインコントローラーに接続してください。 Active Directoryドメインへの参加方法については、「LinuxホストのSQL ServerをActive Directoryドメインに参加する」をご覧ください。
SQL Server 用の Active Directory ユーザーを作成し、SPN を設定する
ドメイン コントローラーで New-ADUser PowerShell コマンドを実行して、有効期限がないパスワードを持つ新しい Active Directory ユーザーを作成します。 次の例では
sqlsvcというアカウント名を使っていますが、任意のアカウント名にすることができます。 アカウントの新しいパスワードを入力するように求められます。Import-Module ActiveDirectory New-ADUser sqlsvc -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $trueSQL Server 専用の Active Directory アカウントを使用して、SQL Server インスタンスの資格情報が同じアカウントを使用する他のサービスと共有されないようにすることが、セキュリティのベスト プラクティスです。 ただし、アカウントのパスワードがわかっている場合は、必要に応じて既存の Active Directory アカウントを再利用できます (次のステップで keytab ファイルを生成するために必要です)。 さらに、このアカウントは、ユーザー アカウントで 128 ビットおよび 256 ビットの Kerberos AES 暗号化 (
msDS-SupportedEncryptionTypes属性) をサポートする場合は有効にする必要があります。 アカウントで AES 暗号化が有効になっていることを確認するには、 [Active Directory ユーザーとコンピューター] ユーティリティでアカウントを見つけ、 [プロパティ] を選択します。 [プロパティ] で [アカウント] タブを見つけて、次の 2 つのチェックボックスが選択されていることを確認します。- [このアカウントで Kerberos AES 128 ビット暗号化をサポートする]
- [このアカウントで Kerberos AES 256 ビット暗号化をサポートする]
このアカウントの サービスプリンシパル名(SPN) を setspn.exe ツールで設定してください。 SPN は、次の例で指定したとおりに書式設定されている必要があります。 SQL Server ホスト コンピューターの完全修飾ドメイン名は、SQL Server ホスト上で
hostname --all-fqdnsを実行することによって確認できます。 別のポート番号を使うように SQL Server を構成している場合を除き、TCP ポートは 1433 にする必要があります。setspn -A MSSQLSvc/<fully qualified domain name of host machine>:<tcp port> sqlsvc setspn -A MSSQLSvc/<netbios name of the host machine>:<tcp port> sqlsvcNote
エラー
Insufficient access rightsが発生する場合は、ドメイン管理者に連絡して、このアカウントに SPN を設定するための十分なアクセス許可があることを確認してください。 SPN の登録に使用されるアカウントにはWrite servicePrincipalName権限が必要になります。 詳細については、「 Kerberos 接続用のサービス プリンシパル名の登録」を参照してください。後で TCP ポートを変更する場合は、新しいポート番号を指定して setspn コマンドを再度実行する必要があります。 また、次のセクションの手順に従って、SQL Server サービスの keytab に新しい SPN を追加する必要があります。
詳細については、「 Kerberos 接続用のサービス プリンシパル名の登録」を参照してください。
SQL Server サービスの keytab を構成する
SQL Server on Linux に Active Directory 認証を構成するには、Active Directory ユーザー アカウントと前のセクションで作成した SPN が必要です。
Important
Active Directory アカウントのパスワードが変更された場合、または SPN が割り当てられているアカウントのパスワードが変更された場合は、新しいパスワードとキー バージョン番号 (KVNO) を使用して、keytab を更新する必要があります。 一部のサービスでは、パスワードが自動的にローテーションされる場合もあります。 問題のアカウントのパスワード ローテーション ポリシーを確認し、予期しないダウンタイムが発生しないように、スケジュールされたメンテナンス アクティビティと一致させます。
SPN の keytab エントリ
前述のセクションで作成したActive Directoryアカウントのキーバージョン番号(KVNO)を確認してください。 通常は 2 ですが、アカウントのパスワードを複数回変更した場合は、別の整数になることがあります。 SQL Server のホスト コンピューターで、次のコマンドを実行します。
- 次の例では、
userが@CONTOSO.COMドメインにあることを前提としています。 ユーザーとドメイン名を自分のユーザーとドメイン名に変更します。
kinit user@CONTOSO.COM kvno user@CONTOSO.COM kvno MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COMNote
SPN がドメインに反映されるまでに数分かかる場合があります (特に、ドメインが大きい場合)。 エラーが発生した場合は、
kvno: Server not found in Kerberos database while getting credentials for MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COMし、数分待ってからやり直してください。 前のコマンドは、前のセクションで説明した Active Directory ドメインにサーバーが参加している場合にのみ機能します。- 次の例では、
ktpassを使い、Windowsコマンドプロンプト内の以下のコマンドで各SPNのキータブエントリを追加します:
-
<DomainName>\<UserName>- Active Directory ユーザー アカウント -
@CONTOSO.COM- お使いのドメインの名前を使用します -
/kvno <#>-<#>を前の手順で取得した KVNO に置換します -
<password>- パスワードは SQL Server の既定のパスワード ポリシーに従う必要があります。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 パスワードには最大 128 文字まで使用できます。 可能な限り長く複雑なパスワードを使用してください。
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 <password> 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 <password> 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 <password> 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 <password> 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 <password> 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 <password>上記のコマンドでは、Active Directory 認証に AES と RC4 の両方の暗号化による暗号を使用できます。 RC4 は古い暗号化暗号です。より高度なセキュリティが必要な場合、AES 暗号化暗号のみを使用して keytab エントリを作成することを選択できます。
Note
最後の2
UserNameエントリは小文字でなければならず、認証が失敗することがあります。-
上記のコマンドを実行すると、
mssql.keytabという名前の keytab ファイルが作成されるはずです。 SQL Server コンピューターにあるフォルダー/var/opt/mssql/secretsにこのファイルをコピーします。keytab ファイルをセキュリティで保護します。
この keytab ファイルにアクセスできるすべてのユーザーは、ドメインで SQL Server を偽装できるので、mssql アカウントのみに読み取りアクセス権が付与されるように、ファイルへのアクセスを制限する必要があります。
sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab sudo chmod 400 /var/opt/mssql/secrets/mssql.keytabkeytab ファイルへのアクセス時に使用するアカウントを指定するには、
mssql-confツールで次の構成オプションを設定する必要があります。sudo mssql-conf set network.privilegedadaccount <username>Note
ユーザー名のみを含め、domainname\username や username@domain は含めません。 SQL Server の内部では、このユーザー名と共に必須となるドメイン名が使用時に追加されます。
次の手順を使用して、Kerberos 認証用の keytab ファイルを使って開始するように SQL Server を構成します。
sudo mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab sudo systemctl restart mssql-server必要に応じて、ドメイン コントローラーへの UDP 接続を無効にしてパフォーマンスを向上させることができます。 多くの場合、ドメイン コントローラーに接続するときは UDP 接続が常に失敗するので、UDP の呼び出しをスキップするように
/etc/krb5.confの構成オプションを設定できます。/etc/krb5.confを編集して、次のオプションを設定します。[libdefaults] udp_preference_limit = 0
この時点で、SQL Server で Active Directory ベースのログインを使用できるようになります。
Transact-SQL で Active Directory ベースのログインを作成する
SQL Server に接続し、Active Directory ベースの新しいログインを作成します。
CREATE LOGIN [CONTOSO\user] FROM WINDOWS;sys.server_principals システム カタログ ビューにログインが表示されていることを確認します。
SELECT name FROM sys.server_principals;
Active Directory 認証を使用して SQL Server に接続する
ドメイン資格情報を使用してクライアント コンピューターにサインインします。 Active Directory 認証を使用してパスワードを再入力することなく SQL Server に接続できるようになります。 Active Directory グループに対するログインを作成した場合は、そのグループのメンバーであるすべての Active Directory ユーザーが、同じ方法で接続できます。
クライアントで Active Directory 認証を使用するための特定の接続文字列パラメーターは、使用しているドライバーによって異なります。 次のセクションの例を検討してください。
ドメインに参加している Linux クライアントでの sqlcmd
ssh とドメイン資格情報を使用して、ドメインに参加している Linux クライアントにサインインします。
ssh -l user@contoso.com client.contoso.com
mssql-tools パッケージがインストールされていることを確認し、資格情報を指定せずにsqlcmdを使用して接続します。
sqlcmd -S mssql-host.contoso.com
WindowsのSQL Serverとは異なり、Kerberos認証はLinux上のSQL Server on Linuxへのローカル接続に機能します。 ただし、SQL ServerホストのFQDNは必ず提供する必要があります。 Active Directory認証は.、localhost、127.0.0.1に接続しようとすると機能しません。
ドメインに参加している Windows クライアント上での SSMS
ドメイン資格情報を使用して、ドメインに参加している Windows クライアントにサインインします。 SQL Server Management Studio がインストールされていることを確認した後、mssql-host.contoso.com ダイアログで [Windows 認証] を指定して、SQL Server インスタンス (例 : ) に接続します。
他のクライアント ドライバーを使用した Active Directory 認証
次の表では、他のクライアント ドライバーに関する推奨事項について説明します。
| クライアント ドライバー | レコメンデーション |
|---|---|
| JDBC | Kerberos 統合認証を使用して、SQL Server に接続します。 |
| ODBC | 統合認証を使用します。 |
| ADO.NET | 接続文字列の構文。 |
その他の構成オプション
PBIS、VAS、Centrifyなどのサードパーティユーティリティを使ってLinuxホストをActive Directoryドメインに接続し、SQL ServerにOpenLDAPライブラリを直接使わせたい場合は、mssql-confでdisablesssdオプションを以下のように設定できます:
sudo mssql-conf set network.disablesssd true
sudo systemctl restart mssql-server
Note
realmdのようなユーティリティはSSSDを設定していますが、PBIS、VAS、CentrifyなどのツールはSSSDを設定しません。 Active Directoryドメインに参加するユーティリティがSSSDを設定しない場合は、disablesssdオプションをtrueに設定してください。 SQL ServerはActive DirectoryでSSSDを使おうとし、その後OpenLDAP機構にフォールバックするため必須ではありませんが、このオプションを設定することでSQL Serverは直接OpenLDAP呼び出しを行い、SSSDを回避できます。
ドメイン コントローラーで LDAPS がサポートされている場合は、SQL Server からドメイン コントローラーへのすべての接続で LDAPS が使用されるように強制することができます。 クライアントが LDAPS 経由でドメイン コントローラーに接続できることを確認するには、Bash コマンド ldapsearch -H ldaps://contoso.com:3269 を実行します。 LDAPS のみを使うように SQL Server を設定するには、以下を実行します。
sudo mssql-conf set network.forcesecureldap true
sudo systemctl restart mssql-server
ホストがSSSDを使ってActive Directoryドメインに参加し、disablesssdがtrueに設定されていない場合、SQL ServerはSSSDよりもLDAPSを使用します。
disablesssdとforcesecureldapの両方がtrueに設定されている場合、SQL ServerはOpenLDAPではなくLDAPSを使用します。
SQL Server 2017 CU 14以降のバージョン
2017 SQL Server(14.x)CU 14から、SQL Serverがサードパーティプロバイダーを使ってActive Directoryドメインコントローラーに接続され、disablesssdをtrueに設定してOpenLDAPコールを一般的なActive Directory検索に使うように設定されている場合、enablekdcfromkrb5confオプションを使ってKDCサーバーの逆DNS検索ではなくkrb5ライブラリをSQL Server KDC検索に強制的に使うこともできます。
これは、SQL Server が通信を試みるドメイン コントローラーを手動で構成し、krb5.conf 内の KDC リストとともに OpenLDAP ライブラリのメカニズムを使用する場合に有用です。
まず、disablesssd と enablekdcfromkrb5conf を true に設定し、次に SQL Server を再起動します。
sudo mssql-conf set network.disablesssd true
sudo mssql-conf set network.enablekdcfromkrb5conf true
sudo systemctl restart mssql-server
次に、/etc/krb5.conf で KDC リストを次のように構成します。
[realms]
CONTOSO.COM = {
kdc = dcWithGC1.contoso.com
kdc = dcWithGC2.contoso.com
}
推奨されませんが、Linux ホストをドメインに参加させるときに SSSD が設定される realmd などのユーティリティを使用しながら、disablesssd を true に設定することで、SQL Server による Active Directory 関連の呼び出しに SSSD ではなく OpenLDAP の呼び出しが使われるようにすることができます。
Note
FQDN (例: CONTOSO.COM\Username) を使用した SQL Server ログインはサポートされていません。
CONTOSO\Username という形式を使用します。
ドメイン ローカル グループからの SQL Server ログインはサポートされていません。 代わりにグローバル セキュリティ ドメイン グループを使用してください。
関連するコンテンツ
- SQL Server on Linux への接続を暗号化する
- SQL Server on Linux およびコンテナーに対する Active Directory 認証を理解する
- SQL Server on Linux およびコンテナーに対する Active Directory 認証のトラブルシューティング
SQL ドキュメントへの投稿
SQL コンテンツを自分で編集できることはご存じですか。 これにより、ドキュメントが改善されるだけでなく、ページの共同作成者としてもクレジットされます。
詳細については、 Microsoft Learn ドキュメントの編集を参照してください。