34052 エラー メッセージと PBM は、SQL Serverの評価モードを持つポリシーに関するアラートを生成します
この記事は、ポリシー ベースの管理 (PBM) を使用するときに SQL エージェント ジョブで誤ったアラートが生成される問題を解決するのに役立ちます。
元の製品バージョン: SQL Server
元の KB 番号: 2923956
現象
次のような状況で問題が発生します。
- SQL Serverで PBM を使用してポリシーを作成します。
- ポリシーの評価モードは [スケジュール時] です。
- ポリシーの条件の 1 つに 関数が
ExecuteSql()
含まれています。
このシナリオでは、SQL Server エージェント ジョブが実行されると、エージェントによって誤ったアラートが生成され、次のエラー メッセージがSQL Serverエラー ログ ファイルに記録されます。
エラー: 34052、重大度: 16、状態: 1。
ポリシー '<ポリシー名>' に違反しました。
注:
この問題は、このジョブを手動で実行しても発生しません。
原因
この問題は、作成された PBM ポリシーに違反しているために発生します。 PBM は、ポリシー違反メッセージを追跡するための 1 つのメカニズムとしてエラー ログに配置します。 これは、サーバー構成を調べて、ポリシーに違反している理由を判断する必要があることを示します。
この問題は、ポリシー内の関数の ExecuteSql()
使用によって発生します。 この関数を使用すると、ポリシー作成者は Transact-SQL で表現された条件を作成でき、PBM 内で任意の Transact-SQL コードを実行することもできます。 そのため、既定では、コードが実行されるセキュリティ コンテキストは、特権の低いアカウント MS_PolicyTsqlExecutionLoginです。 アカウント MS_PolicyTsqlExecutionLoginには、データベースに加えて、データベースに対するmsdb
アクセス許可は付与されません。 ただし、スケジュールされたジョブを実行すると、自動的に追加される最初のステートメントの 1 つは use [<DBName>] ステートメントです。 このステートメントにより、ポリシーチェックが失敗します。
このジョブを手動で実行すると、SQL Serverは現在のセキュリティ コンテキストを使用します。 ポリシーでクエリを実行するアクセス許可がある限り、このジョブは正しく評価されます。
回避策
この問題を解決するには、必要なステートメントを実行するために 、MS_PolicyTsqlExecutionLogin アカウントに正しい権限を付与します。
たとえば、パブリック ロールは、特定のクエリを実行するのに十分です。 このロールは、ビジネス ニーズと会社のポリシーに基づいて必要に応じて変更できます。 ただし、この動作はセキュリティ上の理由から意図されているため、変更する可能性はほとんどありません。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示