Security Compliance

The creation of reports in ARM fails

This article will explain how to solve the issue with failing ARM reports.

First published date

1/20/2021 10:32 AM

Last published date

2/10/2025 1:09 AM

Overview

If you have the issue with reports that are falling in ARM with the message "Report generation preparation failed (report user logon to ARM server unsuccessful)". This article will help you to solve the problem.

Product section

Access Rights Manager

Cause

  1. The login process in the background is slow enough to make the token used for reporting to expire before all calls are done.
  2. If only scheduled reports are failing, the user that scheduled the reports is not present in AD anymore or is disabled.

Resolution

Resolution for cause 1:

For environments with potential higher load and reporting it could be a good way to adjust the time to live for the token to 120 seconds as described below.
  • Add the following configuration switch in C:\ProgramData\protected-networks.com\8MAN\cfg\pnServer.config.xml. You can add it before the last </config>. The configuration file is found on the ARM server.
<debugging.ott.expiration type="System.Int32">120</debugging.ott.expiration> 
  • Restart the ARM Service
  • Try to run the report again.
Disabling the referal chasing may be an alternative solution here. This is sometimes needed for large AD environments.
  • Please add the following switch in the pnServer.config.xml file in the same way mentioned above.
<options.referalChasingOption>None</options.referalChasingOption>
  • Save the file and restart the ARM service.
  • Try the login again.
  • Try to run the reports again.

Resolution for cause 2:
  • If there are only a few scheduled reports, we would recommend to just recreate them manually.
  • If there are a lot of scheduled reports affected and they were all scheduled by the same user, please execute the following script on the ARM database to change the report owner in bulk.
 We would strongly recommend that you backup the ARM Database and stop the ARM-Service on the ARM Server before doing any changes.

-Please customize the highlighted values in bold for @ScheduledReportOwnerUserName and @ScheduledReportOwnerDomainName according to the ones in your system.

-- Scripts are not supported under any SolarWinds support program or service.
-- Scripts are provided AS IS without warranty of any kind. SolarWinds further
-- disclaims all warranties including, without limitation, any implied warranties
-- of merchantability or of fitness for a particular purpose. The risk arising
-- out of the use or performance of the scripts and documentation stays with you.
-- In no event shall SolarWinds or anyone else involved in the creation,
-- production, or delivery of the scripts be liable for any damages whatsoever
-- (including, without limitation, damages for loss of business profits, business
-- interruption, loss of business information, or other pecuniary loss) arising
-- out of the use of or inability to use the scripts or documentation.

 
BEGIN TRANSACTION

		DECLARE @ScheduledReportOwnerUserName NVARCHAR(MAX);
		DECLARE @ScheduledReportOwnerDomainName NVARCHAR(MAX);
		
		SET @ScheduledReportOwnerUserName= 'robert.mustermann'
		SET @ScheduledReportOwnerDomainName= 'pneng'

		IF OBJECT_ID(N'tempdb..#Temp') IS NOT NULL
		BEGIN
			DROP TABLE #Temp
		END

		CREATE TABLE #Temp
		(
			ReportId nvarchar(255)
		);

	BEGIN TRY

		Insert into #Temp
		select _value from _jobconfig_object_values
		where _property = 'scheduledreportid'

		UPDATE v SET v._value = @ScheduledReportOwnerUserName
		FROM _jobconfig_object_values jov
		INNER JOIN _jobconfig_object_values v on v._id = jov._id
		WHERE 
		jov._property='scheduledreportid' and jov._value in (select * from #Temp) 
		and 
		(v._property='reportusername' or v._property='ownerusername');

		UPDATE v SET v._value = @ScheduledReportOwnerDomainName
		FROM _jobconfig_object_values jov
		INNER JOIN _jobconfig_object_values v on v._id = jov._id
		WHERE 
		jov._property='scheduledreportid' and jov._value in (select * from #Temp) 
		and 
		(v._property='owneruserdomainname' or v._property='reportuserdomainname')

		COMMIT TRANSACTION
		DROP TABLE #Temp

	END TRY

	BEGIN CATCH
		THROW;
		IF @@TRANCOUNT > 0
		BEGIN
			ROLLBACK TRANSACTION
		END
	END CATCH