Windows Server の Active Directory Rights Management Services (AD RMS) でイベント ID 84 が発生する

この記事では、Windows Server の Active Directory Rights Management Services (AD RMS) でイベント ID 84 が記録される問題を解決するためのヘルプを提供します。

適用対象: Windows Server 2016、Windows Server 2012 R2
元の KB 番号: 4038927

現象

Active Directory Rights Management Services (AD RMS) がインストールされている Windows Server ベースのコンピューターでは、次のイベントが発生します。

ログ名: アプリケーション
ソース: Active Directory Rights Management サービス
日付: 日付/時刻
イベント ID: 84
タスク カテゴリ: 認定
レベル: エラー
キーワード: クラシック
ユーザー: N/A
コンピューター: ipc01.treyresearch.net
説明:
この Active Directory Rights Management Services (AD RMS) クラスターは、いずれかの AD RMS データベースに対して操作を実行できません。 すべての AD RMS データベースがネットワーク上で正しく動作していること、および AD RMS サービス アカウントにデータベースに対する読み取りおよび書き込みアクセス許可があることを確認します。

パラメーター リファレンス
コンテキスト: Pipeline[ComponentBase.LogResults]
RequestId:RequestID
HelpLink.ProdName: Microsoft SQL Server
HelpLink.ProdVer: 10.50.4000
HelpLink.EvtSrc: MSSQLServer
HelpLink.EvtID: 8115
HelpLink.BaseHelpUrl: https://go.microsoft.com/fwlink
HelpLink.LinkId: 20476
SqlError-1.Class: 0
SqlError-0.State: 1
SqlError-1.Server: sql01.treyresearch.net,1441
SqlError-0.Message: IDENTITY をデータ型 smallint に変換する算術オーバーフロー エラー。
SqlError-1.Number: 3606
SqlError-0.Number: 8115
SqlError-1.Message: 算術オーバーフローが発生しました。
SqlError-1.State: 0
SqlError-0.Server: sql01.treyresearch.net,1441
SqlError-0.Class: 16

Microsoft.RightsManagementServices.LowSeveritySqlException
メッセージ: データベース エンジンは、データベース オブジェクトまたはエンティティの欠落、データの不整合の可能性、トランザクションのデッドロック、セキュリティ設定の問題、SQL コマンド構文エラーなど、ユーザーが修正できるエラーに応答して、この例外をスローしました。 詳細については、SqlError の詳細を確認してください。
HelpLink.ProdName: Microsoft SQL Server
HelpLink.ProdVer: 10.50.4000
HelpLink.EvtSrc: MSSQLServer
HelpLink.EvtID: 8115
HelpLink.BaseHelpUrl: https://go.microsoft.com/fwlink
HelpLink.LinkId: 20476
コンテキスト: ComponentBase.LogResults
SqlError-1.Class: 0
SqlError-0.State: 1
SqlError-1.Server: sql01.treyresearch.net,1441
SqlError-0.Message: IDENTITY をデータ型 smallint に変換する算術オーバーフロー エラー。
SqlError-1.Number: 3606
SqlError-0.Number: 8115
SqlError-1.Message: 算術オーバーフローが発生しました。
SqlError-1.State: 0
SqlError-0.Server: sql01.treyresearch.net,1441
SqlError-0.Class: 16
+ System.Data.SqlClient.SqlException
+ メッセージ: IDENTITY をデータ型 smallint に変換する算術オーバーフロー エラー。 算術オーバーフローが発生しました。
+ HelpLink.ProdName: Microsoft SQL Server
+ HelpLink.ProdVer: 10.50.4000
+ HelpLink.EvtSrc: MSSQLServer
+ HelpLink.EvtID: 8115
+ HelpLink.BaseHelpUrl: https://go.microsoft.com/fwlink
+ HelpLink.LinkId: 20476
+ コンテキスト: ComponentBase.LogResults

原因

この問題は、AD RMS ログ 記録プロセスでログ データベースにイベントが記録されないために発生します。

ログ データベースには、UserAgentId 値を参照する 2 つのテーブルがあります。 両方の dbo。UserAgent と dbo。ServiceRequest テーブルには UserAgentId 列があります。 これらの列はどちらも smallint 型のデータ型です。 UserAgentId 値が最大値 (~32,767) を超えるとすぐに、ログ データベースを更新できません。 トランザクションがログに記録されない場合、RMS は要求をロールバックし、エラーをスローします。

詳細

AD RMS からライセンスを要求すると、クライアントは要求元のアプリケーションに関する基本情報を含むエージェント文字列を渡しています。 dbo。UserAgent テーブルには、一意のエージェント文字列のみが格納されます。

もともと、MSIPC クライアントは、OS、アプリケーション、MSIPC、およびアーキテクチャのバージョンで渡されました。 文字列が格納されているテーブルは、一意のエントリのみを保持します。 ユーザー ベース全体に一意の文字列が多数存在しないようにする必要があります。

MSIPC;version=1.0.2191.0;AppName=EXCEL.EXE;AppVersion=16.0.7369.2127;AppArch=x86;OSName=Windows;OSVersion=10.0.10586;OSArch=amd64

ある時点で、MSIPC クライアントは、そのユーザー エージェント文字列にプロセス ID (PID) を含めて開始しました。 これにより、すべての文字列が一意になります。

MSIPC;version=1.0.2456.0;AppName=EXCEL.EXE;AppVersion=15.0.4919.1000;AppArch=x86;PID=13660;OSName=Windows;OSVersion=6.1.7601;OSA

そのため、格納する一意の文字列が非常に多くないテーブルには、何千もの文字列が含まれています。

回避策

この問題を回避するには、AD RMS クラスターでのログ記録を無効にします。

A D R M S クラスターの [ログ記録を有効にする] オプションをオフにします。

解決方法

この問題を解決するには、列のデータ型を smallint から int (整数) に変更します。 これを行うには、次の手順を実行します。

注:

大規模なログ データベース (DB) の変更に時間がかかる場合があり、SQL のパフォーマンスの問題が発生する可能性があります。 そのため、運用環境の SQL インスタンスから SQL DB をバックアップし、運用環境以外の SQL の場所に復元することをお勧めします。 その後、運用環境以外の SQL の場所でデータベースの変更を実行し、運用 DB を置き換えることができます。

  1. AD RMS ログ データベースをバックアップします。

  2. SQL 情報を収集します。

    • AD RMS ログ データベース名
    • Dbo.UserAgent キー名

    A D R M S ログ データベース名と Dbo.UserAgent キー名に関する SQL 情報を収集します。

  3. スクリプトを生成します (次のサンプルを参照)。

サンプル スクリプト

注:

データベース名と UserAgent テーブル キーの値を編集して、ターゲット環境を反映します。

/******************************************************************************* 
THIS TOOL AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
*******************************************************************************/
use [DRMS_Logging_ipc_treyresearch_net_443]
go

ALTER TABLE [dbo].[ServiceRequest] drop CONSTRAINT [FK_CLIENTINFOID_ServiceRequest_UserAgent]
GO

Alter table [dbo].[ServiceRequest] alter COLUMN [UserAgentId] int
GO

ALTER TABLE [dbo].[UserAgent] DROP CONSTRAINT [PK__UserAgen__UserAgentId]
GO

Alter table [dbo].[UserAgent] alter COLUMN [UserAgentId] int
GO

Alter table [dbo].[UserAgent] ADD PRIMARY KEY (UserAgentId)
GO

ALTER TABLE [dbo].[ServiceRequest] WITH CHECK ADD CONSTRAINT [FK_CLIENTINFOID_ServiceRequest_UserAgent] FOREIGN KEY([UserAgentId]) REFERENCES [dbo].[UserAgent] ([UserAgentId])
GO

ALTER TABLE [dbo].[ServiceRequest] CHECK CONSTRAINT [FK_CLIENTINFOID_ServiceRequest_UserAgent]
GO