昨年、Red Hat Enterprise Linux (RHEL) に microsoft.sql.server Ansible Role が導入されました。RHEL 8.8 および 9.2 のリリースに伴い、このロールは複数の新機能を含むアップデートを受け取ります。
- Active Directory サーバーを使用した SQL Server の認証の設定。
- Always On 可用性グループの管理機能の拡張。これには、非同期可用性レプリカの設定、および 読み取りスケールの Always On クラスタの設定のサポートが含まれます。
- RHEL 8 および RHEL 9 での SQL Server 2022 の設定と管理。
この記事では Active Directory (AD) との統合について取り上げ、プロセス全体を解説します。
- SQL Server の AD 認証を設定するための要件を満たしていることを確認する
- Ansible インベントリーファイルを準備する
- 設定する必要がある変数を確認し、ロールを使用して Active Directory で認証を自動的に設定する Ansible Playbook ファイルを準備する
- ロールを実行する
- 設定を完了する
- 認証が想定どおりに機能することを確認する
前提条件
開始する前に、ロールの前提条件を満たしていることを確認する必要があります。
- Active Directory サーバーが実行されており、RHEL マシンからアクセスできる必要があります。前提条件の概要については、マイクロソフトのドキュメント「Join SQL Server on a Linux host to an Active Directory domain」をご覧ください。前提条件について問題がある場合は、Active Directory のトラブルシューティングを参照してください。
- DNS ルックアップが機能することを確認します。RHEL マシンから、IP アドレスとその短縮名および完全な DNS 名を使用して Active Directory サーバーに正常に ping できる必要があります。
- 逆引き DNS ルックアップが機能することを確認します。Active Directory サーバーの IP アドレスに対して
nslookupコマンドを実行すると、正しい DNS 名に解決され、その DNS 名が正しい IP アドレスに解決される必要があります。 - ドメインにアカウントとサービスプリンシパル名 (SPN) を作成するパーミッションを持つ Active Directory ユーザーのアクセス権と認証情報があることを確認します。
Ansible インベントリーを準備する
インベントリーに含まれるのは、Active Directory 認証用に設定する RHEL サーバーのみです。この例では、単一の RHEL ノード rhel-sql-server.example.com が含まれているインベントリーファイル inventory.ymlを使用しています。
$ cat inventory.yml
---
all:
hosts:
rhel-sql-server.example.comロールを使用する
次に、Active Directory で認証を設定するための Playbook が必要になります。これは、最初に Playbook の例を確認して必要に応じて変数とパラメーターを調整し、それを土台として使用すると最も簡単に実行できます。
このロールには、変数を使ってパスワードを設定する必要があります。この記事の例では、これらの変数をプレーンテキストで表示していますが、実稼働環境では Ansible Vault を使用してパスワードを暗号化する必要があります。
Playbook の実例
以下は playbook.yml として保存された Playbook の例です。Active Directory を使用して認証を設定します。
---
- name: Configure with AD server authentication
hosts: all
vars:
# General variables
mssql_accept_microsoft_odbc_driver_17_for_sql_server_eula: true
mssql_accept_microsoft_cli_utilities_for_sql_server_eula: true
mssql_accept_microsoft_sql_server_standard_eula: true
mssql_version: 2022
mssql_password: "p@55w0rD"
mssql_edition: Evaluation
mssql_manage_firewall: true
# AD Integration required variables
mssql_ad_configure: true
mssql_ad_sql_user_name: sqluser
mssql_ad_sql_password: "p@55w0rD1"
ad_integration_realm: domain.com
ad_integration_user: Administrator
ad_integration_password: Secret123
# AD Integration optional variables
mssql_ad_sql_user_dn: "CN=sqluser,CN=Users,DC=DOMAIN,DC=COM"
mssql_ad_netbios_name: domainサンプル Playbook の変数は、一般的な変数、必須の変数、およびオプション変数の 3 つのセクションに分けられています。
一般的な変数
エンドユーザーライセンス契約 (EULA) を受け入れる変数は、true に設定して mssql-server パッケージの条件に同意することを確認する必要があります。次のようなものが含まれます。
mssql_accept_microsoft_odbc_driver_17_for_sql_server_eulamssql_accept_microsoft_cli_utilities_for_sql_server_eulamssql_accept_microsoft_sql_server_standard_eula
その他の変数:
mssql_versionは、管理する SQL Server のバージョン (2017、2019、または 2022) を定義します。mssql_passwordはsaユーザーのパスワードを設定します。mssql_editionは SQL Server に設定するエディションを定義します。mssql_manage_firewallはファイアウォールを有効にして必要なポートを開きます。これは任意の変数です。ロールにファイアウォールを管理させたい場合にのみ使用します。
AD 統合に必要な変数
これらの変数は必須です。
mssql_ad_configure:Active Directory 認証を設定するかどうかを定めます。mssql_ad_sql_user_name:SQL Server の認証を有効にするために Active Directory サーバーに作成されるユーザーの名前です。このロールは adutil を使用します。これには、特権ユーザーとしてアクセスするためのパーミッションを持つユーザーを作成する必要があります。mssql_ad_sql_password:作成されるユーザーのパスワードです。ad_integration_realm:Active Directory レルム名です。ad_integration_user:Active Directory での特権ユーザーのユーザー名です。このユーザーはドメインにすでに存在している必要があります。ad_integration_password:ユーザーのパスワードです。
AD 統合のオプション変数
これらの変数は任意です。
mssql_ad_sql_user_dn:AD サーバーがユーザーアカウントをデフォルトの Users OU ではなく、カスタムの Organizational Unit (OU) に保存している場合は、この変数を設定する必要があります。デフォルトでは、ロールは変数mssql_ad_sql_user_nameおよびad_integration_realmに指定された値に基づいて識別名を作成し、UsersOU を使用します (例:CN=sqluser,CN=Users,DC=DOMAIN,DC=COM)。識別名を指定してこれを上書きできます。mssql_ad_netbios_name:AD サーバーの NetBIOS ドメイン名が、ad_integration_realm変数を使用して提供するドメイン名の最初のサブドメインと等しくない場合はこの変数を設定する必要があります (例:ad_integration_realmをdomain.contoso.comに設定したが NetBIOS ドメイン名がdomainではない場合)。この値は、SQL Server で{{ mssql_ad_netbios_name }}\{ad_integration_user }}ログインを作成するために使用されます。
Ansible Role を実行する
すべての前提条件が満たされていることを確認し、Ansible インベントリーと Playbook の準備ができたら、Playbook を実行できます。
$ ansible-playbook -i inventory.yml playbook.ymlドメインユーザーを SQL Server に追加する
ユーザーがログインできるようにするには、そのユーザーを SQL Server に追加する必要があります。そのためには、各 AD ドメインユーザーに対して次の T-SQL コマンドを実行します。
CREATE LOGIN \[<domain>**<username>*\] FROM WINDOWS;追加の暗号化タイプを有効にする
ロールを実行して Active Directory 認証を設定した後、Active Directory の mssql_ad_sql_user_name 変数で定義されたユーザーに、AES128 および AES256 Kerberos 暗号化タイプを追加する必要があります。これを実行するには、Active Directory の Web UI を使用するか、PowerShell を使用できます。
Web UI
AD サーバーの Web UI を開き、ログインします。
- Tools > Active Directory Users and Computers > [domain] > Users > [sqluser] > Account に移動します。
- Account options リストから、「This account supports Kerberos AES 128 bit encryption」および「This account supports Kerberos AES 256 bit encryption」を選択します。
- Apply をクリックします。
PowerShell
PowerShell で Set-ADUser コマンドを使用して、<sqluser> を mssql_ad_sql_user_name 変数として設定したユーザー名に置き換えます。
Set-ADUser -Identity <sqluser> -KerberosEncryptionType AES128,AES256Active Directory での認証を検証する
これで、ロールを実行して AD サーバー認証を設定し、必要な暗号化タイプを<sqluser>ユーザーに追加できました。ここから次のいずれかの方法を使用して認証できます。
- Windows または RHEL:Azure Data Studio (ADS)
- Windows:SQL Server Management Studio (SSMS)
- RHEL:Linux ターミナル
Azure Data Studio (ADS)
ADS がまだインストールされていない場合、マイクロソフトのドキュメントに従い、Azure Data Studio のダウンロードとインストールを行います。
インストールが完了したら ADS を起動します。
- Create a connection をクリックします。
- Authentication type のリストから、Windows Authentication を選択します。
- その他のフィールドを入力し、Connect をクリックします。
これで SQL Server を使用できるようになりました。
SQL Server Management Studio (SSMS)
まず、SQL Server へのログインに使用するユーザーとして Windows にログインしてから、SSMS を起動します。
- Connect to Server ペインで、Server type リストから Database Engine を選択します。
- Server name フィールドに、ロールを実行した RHEL インスタンスの完全修飾ドメイン名 (FQDN) を入力します。
- Authentication リストで Windows Authentication を選択し、次のフィールドを入力します。
- Server type:Database Engine
- Server name:サーバー名を入力
- Authentication:Windows Authentication
- Connect をクリックします。
Linux ターミナル
Linux ターミナルを使用して認証を検証するには、SSH を使用して、 ロールによって作成されたユーザーとしてサーバーにログインします。
$ ssh -l <sqluser>@<domain.com> <client.domain.com>認証する Active Directory ユーザーの Kerberos チケットを取得します。
$ kinit <AD_user_name>@<DOMAIN.COM>sqlcmd を使用して SQL Server にログインします。たとえば、現在のユーザーを取得するクエリを実行します。
/opt/mssql-tools/bin/sqlcmd -S.-Q 'SELECT SYSTEM_USER'まとめ
microsoft.sql.server ロールは、ユーザー認証のための Active Directory との統合を自動化するのに役立ちます。このロールは一貫した方法で、redhat.rhel_system_roles.ad_integration ロールを使用して Active Directory に接続し、redhat.rhel_system_roles.firewall ロールを使用してファイアウォールを設定します。Red Hat は、RHEL 上のさまざまなサービスやツールを管理するためにさらに多くのシステムロールを提供しています。ワークフローの自動化にご興味がある場合は、利用可能な RHEL システムロールのリストを確認し、このトピックに関する資料や関連のブログ記事をご覧ください。豊富な選択肢をご活用いただけます。
microsoft.sql.server ロールのその他の活用法については、公式ドキュメントをご覧ください。
執筆者紹介
Sergei Petrosian is a technical writer at Red Hat working on Satellite and Foreman documentation.
類似検索
Red Hat Device Edge が NVIDIA Jetson Orin で実行可能に
Ansible Automation Platform 2.6 へのアップグレードパスを計画する
Infrastructure At The Edge | Compiler
Operating System Management | Compiler
チャンネル別に見る
自動化
テクノロジー、チームおよび環境に関する IT 自動化の最新情報
AI (人工知能)
お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート
オープン・ハイブリッドクラウド
ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。
セキュリティ
環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報
エッジコンピューティング
エッジでの運用を単純化するプラットフォームのアップデート
インフラストラクチャ
世界有数のエンタープライズ向け Linux プラットフォームの最新情報
アプリケーション
アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細
仮想化
オンプレミスまたは複数クラウドでのワークロードに対応するエンタープライズ仮想化の将来についてご覧ください