Windows 上の SQL Server : Machine Learning Services の分離の変更

適用対象: SQL Server 2019 (15.x) 以降 - Windows のみ、および SQL Server 2022 (16.x) - Windows のみ

この記事では、SQL Server 2019 で最初に導入された、Windows 上の SQL Server の Machine Learning Services での分離メカニズムに対する変更について説明します。 これらの変更は、SQLRUserGroup、ファイアウォール規則、ファイルのアクセス許可、および暗黙の認証に影響します。

詳細については、「Windows に SQL Server Machine Learning Services をインストールする方法」を参照してください。

分離メカニズムの変更

Windows では、SQL セットアップにより、外部プロセスの分離メカニズムが変更されます。 この変更により、ローカル ワーカー アカウントが、Windows で実行されているクライアント アプリケーションの分離テクノロジである AppContainers に置き換えられます。

変更の結果に対して、管理者が特別に行うアクション項目はありません。 新規またはアップグレードされたサーバーでは、sp_execute_external_script から実行されるすべての外部スクリプトおよびコードは、自動的に新しい分離モデルに従います。

要約すると、このリリースの主な違いは次のとおりです。

  • SQL 制限ユーザー グループ (SQLRUserGroup) のローカル ユーザー アカウントは、外部プロセスを実行するために作成または使用されなくなりました。 それらは AppContainers によって置き換えられます。
  • SQLRUserGroup メンバーシップが変更されました。 メンバーシップは、複数のローカル ユーザー アカウントの代わりに、SQL Server Launchpad サービス アカウントだけで構成されます。 R と Python のプロセスは、AppContainers を通じて分離された Launchpad サービス ID で実行されるようになりました。

分離モデルは変更されていますが、旧バージョンの SQL Server と比較したとき、インストール ウィザードとコマンドライン パラメーターは同じままです。 インストールにヘルプが必要な場合、SQL Server 2016-2019 Machine Learning Services をインストールする方法に関するページまたは Windows に SQL Server 2022 Machine Learning Services (Python と R) をインストールする方法に関するページを参照してください。

AppContainer の分離について

以前のリリースでは、SQLRUserGroup には、外部プロセスの分離と実行に使用されるローカル Windows ユーザー アカウント (MSSQLSERVER00-MSSQLSERVER20) のプールが含まれていました。 外部プロセスが必要な場合、SQL Server Launchpad サービスは使用可能なアカウントを取得し、それを使用してプロセスを実行します。

SQL Server 2019 以降、SQL セットアップでローカル ワーカー アカウントが作成されなくなりました。 代わりに、AppContainer によって分離が実現されます。 実行時に、ストアド プロシージャまたはクエリで埋め込みスクリプトやコードが検出されると、SQL Server は拡張機能固有の起動ツールの要求を使用して Launchpad を呼び出します。 Launchpad は、自身の ID の下のプロセスで適切なランタイム環境を呼び出し、AppContainer をインスタンス化して、それを含めます。 ローカル アカウントとパスワードの管理が不要になったため、これは有益な変更です。 また、ローカル ユーザー アカウントが禁止されているインストールでは、ローカル ユーザー アカウントの依存関係を削除することで、この機能を使用できるようになります。

AppContainer は、SQL Server に実装されているため、内部メカニズムです。 プロセス モニターには AppContainer の物理的な証拠は表示されませんが、セットアップによって作成された、プロセスによるネットワーク呼び出しを防ぐための送信ファイアウォール規則で AppContainer を見つけることができます。

セットアップによって作成されたファイアウォール規則

既定では、SQL Server はファイアウォール規則を作成することにより、送信接続を無効にします。 以前は、これらの規則はローカル ユーザー アカウントに基づいており、そこではセットアップが SQLRUserGroup のためにアウトバウンド規則を作成し、メンバーへのネットワーク アクセスを拒否していました (各ワーカー アカウントは、規則に従いローカル原則として一覧表示されていました)。

AppContainers への移行の一環として、AppContainer SID に基づく新しいファイアウォール規則があります。これは、SQL Server セットアップで作成された 20 の AppContainers のそれぞれに 1 つずつあります。 ファイアウォール規則名の名前付け規則は、Block network access for AppContainer-00 in SQL Server instance MSSQLSERVER です。ここで、00 は AppContainer の番号 (既定では 00-20) で、MSSQLSERVER は SQL Server インスタンスの名前です。

Note

ネットワーク呼び出しが必要な場合は、Windows ファイアウォールでアウトバウンド規則を無効にすることができます。

ファイルのアクセス許可

既定では、外部の Python および R スクリプトには、作業ディレクトリに対する読み取りアクセス許可のみが与えられます。

ご利用の Python または R スクリプトで他の任意のディレクトリへのアクセス権が必要な場合は、NT Service\MSSQLLaunchpad サービス ユーザー アカウントおよびこのディレクトリ上の ALL APPLICATION PACKAGES読み取りおよび実行アクセス許可または書き込みアクセス許可を付与する必要があります。

アクセス権を付与するには、次の手順に従います。

  1. ファイル エクスプローラーで、作業ディレクトリとして使用するフォルダーを右クリックし、[プロパティ] を選択します。
  2. [セキュリティ] を選択し、 [編集] をクリックしてアクセス許可を変更します。
  3. [追加] をクリックします。
  4. [場所の指定] がローカル コンピューター名であることを確認してください。
  5. [選択するオブジェクト名を入力してください] に 「ALL APPLICATION PACKAGES」と入力し、 [名前の確認] をクリックします。 OK をクリックします。
  6. [許可] 列の下にある [読み取りおよび実行] を選択します。
  7. 書き込みアクセス許可を付与する場合は、 [許可] 列の下にある [書き込み] を選択します。
  8. [OK] をクリックし、さらに [OK] をクリックします。

プログラム ファイルのアクセス許可

以前のリリースと同様に、SQLRUserGroup は、SQL Server BinnR_SERVICES、および PYTHON_SERVICES ディレクトリの実行可能ファイルに対する読み取りと実行のアクセス許可を、引き続き提供します。 このリリースでは、SQLRUserGroup の唯一のメンバーは SQL Server Launchpad サービス アカウントです。 Launchpad サービスが R または Python の実行環境を開始すると、プロセスは LaunchPad サービスとして実行されます。

暗黙の認証

以前と同様に、スクリプトまたはコードが、信頼されている認証を使用してデータまたはリソースを取得するために SQL Server に接続する必要がある場合、暗黙の認証には追加の構成が必要です。 追加の構成では、複数のワーカー アカウントではなく、単一の SQL Server Launchpad サービス アカウントが唯一のメンバーである SQLRUserGroup のためのデータベース ログインを作成する必要があります。 このタスクの詳細については、「データベース ユーザーとして SQLRUserGroup を追加する」を参照してください。

SQL Server セットアップの一環として、現在の既定の R_SERVICES および PYTHON_SERVICES にシンボリック リンクが作成されています。 このリンクを作成しない場合、代替案としては「すべてのアプリケーション パッケージ」の読み取りアクセス許可を、そのフォルダーまでの階層に付与することがあります。

こちらもご覧ください