次の方法で共有


SQL Server のドメイン コントローラーで RemoteSigned が設定されていない場合の SQL Server PowerShell の問題

この記事は、ドメイン コントローラーのマシン ポリシーが SQL Server の GPO によって RemoteSigned に設定されていない場合に発生する問題を解決するのに役立ちます。

元の製品バージョン: SQL Server
元の KB 番号: 2995870

現象

Microsoft SQL Server 2012 または Microsoft SQL Server 2014 の SQL Server PowerShell コンソールを開くと、ドメイン コントローラーのマシン ポリシーがグループ ポリシー オブジェクト (GPO) によって RemoteSigned に設定されていないと、次のエラー メッセージが表示されることがあります。

set-executionpolicy: Windows PowerShell は実行ポリシーを正常に更新しましたが、より具体的なスコープで定義されたポリシーによって設定がオーバーライドされます。 オーバーライドにより、シェルは現在有効な実行ポリシーである Unrestricted を保持します。 Get-ExecutionPolicy -List を入力して、実行ポリシーの設定を表示します。
詳細については、「
"Get-Help Set-ExecutionPolicy"
行: 1 文字: 1
+ set-executionpolicy RemoteSigned -scope process -Force

さらに、ドメイン コントローラーが GPO によって RemoteSigned に設定されていない場合、syspolicy_purge_history ジョブは 3 番目の手順で失敗し、次のエラー メッセージが表示されることがあります。

ユーザーとして実行: AJ\devARsqlagt。 ジョブ ステップは、PowerShell スクリプトの 1 行目でエラーを受け取りました。 対応する行は 'set-executionpolicy RemoteSigned -scope process -Force' です。 スクリプトを修正し、ジョブを再スケジュールします。 PowerShell によって返されるエラー情報は、"セキュリティ エラー" です。 '. プロセス終了コード -1。 ステップは失敗しました。

原因

この問題は、コンピューター ポリシーが GPO によって RemoteSigned に設定されておらず、メンバー サーバーにプッシュされるために発生します。 たとえば、ドメイン コントローラーのセットアップの実行ポリシーが次の場合です。

Scope -                   ExecutionPolicy
--------------------------------------------------------------
MachinePolicy -           Unrestricted
UserPolicy -              Undefined
Process -                 RemoteSigned
CurrentUser -             Undefined
LocalMachine -            RemoteSigned

MachinePolicy は、他のすべてのポリシーよりも優先されます。

グループ ポリシーは、ドメイン コントローラーから、そのグループ ポリシーに関連付けられているメンバー サーバーにプッシュされます。 これにより、 MachinePolicyUnrestricted モードに設定され、SQL Server PowerShell は RemoteSigned 実行ポリシーを使用して実行を試みます。 したがって、競合する状況が発生し、 syspolicy_purge_history ジョブが失敗します。 ドメイン コントローラーのマシン ポリシーに関係なく、SQL Server でも同じジョブが正常に実行されます。

回避策

セキュリティ対策として、SQL Server 2012 は RemoteSigned ポリシーで SQL PowerShell を起動します。 これにより、ジョブが失敗し、前の問題が発生します。

制限なしを意味するため、セキュリティの観点から無制限はお勧めしません。 これは、SQL 2012 から開始した場合、MachinePolicy がドメイン コントローラーで RemoteSigned として設定されている場合に PowerShell スクリプトが正常に実行される理由です。

この問題を回避するには、以下のいずれかの方法を使用します。

  • GPO によってドメイン コントローラーのマシン ポリシーを設定しないでください。 定義されていない場合は、次のレベルのポリシー (UserPolicy、Process、CurrentUser、最後の LocalMachine など) が優先されることを意味します。

  • Active Directory ユーザーとコンピューターに新しい組織単位 (OU) を作成し、この OU をグループ ポリシーにリンクします。 次に、RemoteSigned ポリシーに対して有効にします。 これを行うには、次の手順を実行します。

    1. Active Directory ユーザーとコンピューターに移動します。

    2. Domain ->New ->Organizational Unit を右クリックして、新しい組織単位を作成します。

    3. 実行 gpmc.msc を入力し、 グループ ポリシー オブジェクト ->New を右クリックして新しい GPOを作成します。

    4. 新しく作成した GPO ->Edit を右クリックします。 新しいウィンドウが開きます。

    5. Computer Configuration ->Policies ->Administrative Templates ->Windows コンポーネント ->Windows PowerShell -> ダブルクリックスクリプト実行時に戻る

    6. Execution ポリシーを [ローカル スクリプトとリモート署名付きスクリプトを許可する] に設定します。

    7. 適用をクリックし、OK をクリックします。

    8. Active Directory ユーザーとコンピューターに移動し、[Computers] をクリックします。 ドメインのコンピューターの一覧が表示されます。 新しく作成した組織単位で移動するコンピューターを右クリックします。 この方法では、1 つまたは 1 つのコンピューター のグループを組織単位に移動できます。

    9. グループ ポリシー管理に移動し、新しく作成した Organizational Unit を右クリックし、[既存の GPO のリンク] をクリックし新しく作成した GPO を選択して、[OK] をクリックします。

    10. PowerShell でこのコマンドを実行して、ドメイン コントローラーとクライアント コンピューターのポリシーを更新します。

      gpupdate /force
      
    11. 組織単位とクライアント コンポーネントのマシン ポリシーを確認します。RemoteSigned である必要があります。

関連情報

実行ポリシーについて