Skip to main content

GUEST/IDM/CONNECT

2.2.10 Release Notes

Document Details

Document Issue Level:

1.0

Document Issue Date:

May 6, 2026

Product Details

Product Description:

Symmetry IDM - CONNECT and GUEST

Release Version:

2.2.10

Introduction

This bulletin provides an overview of product improvements and an introduction to new features included in Symmetry CONNECT/GUEST/IDM for hosted and on-premise deployments.

Note

For Hosted customers, the planned deployment date will be communicated via the online status page. Please visit: Symmetry Identity Management (IDM) Status

Private Cloud Customers, please access your dedicated status page.

Important Deployment Information

For general deployment guidance, please refer to the Connect and Guest Deployment Guide (Issue 1.75.0)

On-Premise Deployments:

Warning

For Customers Upgrading from versions earlier than 1.71.0, upgrade to 1.71.0 before upgrading to this release.

Warning

Before upgrading to 2.2.10 run the following scripts in SQL:

USE idm
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'ix_projection_employee_data_feed_report_group_id_identity_ids' AND object_id = OBJECT_ID('projection.employee_data_feed_report'))
    CREATE NONCLUSTERED INDEX [ix_projection_employee_data_feed_report_group_id_identity_ids]
    ON [projection].[employee_data_feed_report] (group_id ASC, identity_id ASC)
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'ix_projection_employee_data_feed_report_group_id_manager_id' AND object_id = OBJECT_ID('projection.employee_data_feed_report'))
    CREATE NONCLUSTERED INDEX [ix_projection_employee_data_feed_report_group_id_manager_id]
    ON [projection].[employee_data_feed_report] (group_id ASC, manager_id ASC)
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
USE connect
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'ix_projection_card_activity_report_group_id_identity_ids' AND object_id = OBJECT_ID('projection.card_activity_report'))
    CREATE NONCLUSTERED INDEX [ix_projection_card_activity_report_group_id_identity_ids]
    ON [projection].[card_activity_report] (group_id ASC, identity_id ASC)
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'ix_projection_symmetry_integration_support_group_id_utc_received_date' AND object_id = OBJECT_ID('projection.symmetry_integration_support'))
    CREATE NONCLUSTERED INDEX [ix_projection_symmetry_integration_support_group_id_utc_received_date]
    ON [projection].[symmetry_integration_support] (group_id ASC, utc_received_date ASC)
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
-- Ensure index not already added:
IF NOT EXISTS
(
    SELECT * 
    FROM sys.indexes 
    WHERE name='IX_SymmetryCardTransactions_EventDate' 
        AND object_id = OBJECT_ID('dbo.SymmetryCardTransactions')
)
BEGIN
    CREATE NONCLUSTERED INDEX [IX_SymmetryCardTransactions_EventDate] ON [dbo].[SymmetryCardTransactions]
    (
        [eventDate] ASC
    )
    INCLUDE([eventId]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
END

Warning

This release requires additional rollback steps (See the Following steps).

In RabbitMQ Purge the following queues:

G4S.IdentityManagement.Endpoint_dataretention
G4S.VMS.Endpoint_dataretention_manager
Amag.CAC.Endpoint_dataretention

In SQL:

DELETE FROM [Quartz_Masstransit].[dbo].[reoccurring_command]
  WHERE command_id IN ('25A13B40-8BF8-47FF-AC02-CE32A6868430', '6DEB8D95-35AF-4916-84B1-B0327D46C745')

DELETE FROM [logging].[dbo].[amag_bash_scripts]
  WHERE name IN ('01.099.SymmetryCardTransactionsCleanupReoccuringCommand.sh', '01.100.EmployeeDataFeedCleanupReoccuringCommand.sh')
-- [vms] Database Reports
IF NOT EXISTS (SELECT 1 FROM [vms].[dbo].[report] WHERE [report_id] = N'ea8ec757-d50c-4024-98a2-50055e4b5580')
BEGIN
    INSERT [vms].[dbo].[report] ([report_id], [name], [display_name], [template], [spToCall], [parameters], [extension], [allowed_roles], [group_id], [category], [max_record_count], [contentType], [create_date])
    VALUES (N'ea8ec757-d50c-4024-98a2-50055e4b5580', N'DLRActivityReportVms', N'DLR Activity Report', N'', N'usp_report_dlr_reader_activity', N'GroupId,RowCount,DateRangePicker,CardReaders,IntegrationId', N'csv', NULL, NULL, N'DLR', 200000, N'text/csv', CAST(N'2026-01-08T13:28:28.933' AS DateTime))
END
GO

IF NOT EXISTS (SELECT 1 FROM [vms].[dbo].[report] WHERE [report_id] = N'2a51f4a1-8f70-4f65-8b08-b94c8e9d6066')
BEGIN
    INSERT [vms].[dbo].[report] ([report_id], [name], [display_name], [template], [spToCall], [parameters], [extension], [allowed_roles], [group_id], [category], [max_record_count], [contentType], [create_date])
    VALUES (N'2a51f4a1-8f70-4f65-8b08-b94c8e9d6066', N'ComplianceFIPS201ReportVms', N'Compliance FIPS201 Report', N'', N'usp_report_compliance_fips201', N'GroupId,RowCount,DateRangePicker,AccessCodeNames', N'csv', NULL, NULL, N'DLR', 200000, N'text/csv', CAST(N'2026-01-08T13:28:28.890' AS DateTime))
END
GO

IF NOT EXISTS (SELECT 1 FROM [vms].[dbo].[report] WHERE [report_id] = N'21719f9d-ab99-440b-851d-d6048abde135')
BEGIN
    INSERT [vms].[dbo].[report] ([report_id], [name], [display_name], [template], [spToCall], [parameters], [extension], [allowed_roles], [group_id], [category], [max_record_count], [contentType], [create_date])
    VALUES (N'21719f9d-ab99-440b-851d-d6048abde135', N'DLRAccessAreaOwnerReportVms', N'DLR Access Area Owner Report Vms', N'', N'usp_report_dlr_access_area_owner', N'GroupId,RowCount,DateRangePicker,AccessCodeNames', N'csv', NULL, NULL, N'DLR', 200000, N'text/csv', CAST(N'2026-01-08T13:28:28.917' AS DateTime))
END
GO

-- [connect] Database Reports
IF NOT EXISTS (SELECT 1 FROM [connect].[dbo].[report] WHERE [report_id] = N'ab23f7c6-5ab0-43af-9e39-26ec61a1f982')
BEGIN
    INSERT [connect].[dbo].[report] ([report_id], [name], [display_name], [template], [spToCall], [parameters], [extension], [allowed_roles], [group_id], [category], [max_record_count], [contentType], [create_date])
    VALUES (N'ab23f7c6-5ab0-43af-9e39-26ec61a1f982', N'DLRActivityReportCac', N'DLR Activity Report', N'', N'usp_report_dlr_reader_activity', N'GroupId,RowCount,DateRangePicker,Readers', N'csv', NULL, NULL, N'DLR', 500000, N'text/csv', CAST(N'2026-01-08T13:28:39.603' AS DateTime))
END
GO

IF NOT EXISTS (SELECT 1 FROM [connect].[dbo].[report] WHERE [report_id] = N'ed199eca-7461-4bb7-bd87-58bae34854a5')
BEGIN
    INSERT [connect].[dbo].[report] ([report_id], [name], [display_name], [template], [spToCall], [parameters], [extension], [allowed_roles], [group_id], [category], [max_record_count], [contentType], [create_date])
    VALUES (N'ed199eca-7461-4bb7-bd87-58bae34854a5', N'DLRAccessAreaOwnerReportCAC', N'DLR Access Area Owner Report CAC', N'', N'usp_report_dlr_access_area_owner', N'GroupId,RowCount,DateRangePicker,AccessCodeNames', N'csv', NULL, NULL, N'DLR', 500000, N'text/csv', CAST(N'2026-01-08T13:28:39.620' AS DateTime))
END
GO

IF NOT EXISTS (SELECT 1 FROM [connect].[dbo].[report] WHERE [report_id] = N'2a51f4a1-8f70-4f65-8b08-b94c8e9d6066')
BEGIN
    INSERT [connect].[dbo].[report] ([report_id], [name], [display_name], [template], [spToCall], [parameters], [extension], [allowed_roles], [group_id], [category], [max_record_count], [contentType], [create_date])
    VALUES (N'2a51f4a1-8f70-4f65-8b08-b94c8e9d6066', N'ComplianceFIPS201ReportCac', N'Compliance FIPS201 Report', N'', N'usp_report_compliance_fips201', N'GroupId,RowCount,DateRangePicker,AccessCodeNames', N'csv', NULL, NULL, N'DLR', 500000, N'text/csv', CAST(N'2026-01-08T13:28:39.590' AS DateTime))
END
GO
-- Create tablew
USE idm
Go
CREATE TABLE [projection].[deleted_employees]
(
	[deleted_employee_id] [int] NOT NULL IDENTITY(1,1) PRIMARY KEY,
	[group_id] [uniqueidentifier] NOT NULL,
	[company_id] [uniqueidentifier] NOT NULL,
	[building_id] [uniqueidentifier] NOT NULL,
	[employee_id] [uniqueidentifier] NOT NULL,
	[create_date] [datetime] not null default(getutcdate()),
	[created_by_id] [uniqueidentifier] not null
);
GO
-- Create indices
CREATE NONCLUSTERED INDEX [IX_projection_delete_employee_select] 
ON [projection].[deleted_employees] (create_date)
INCLUDE (
    deleted_employee_id,
	employee_id
    )
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

CREATE NONCLUSTERED INDEX [IX_projection_delete_employee_delete] 
ON [projection].[deleted_employees] (employee_id)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

UPDATE [quartz_masstransit].[dbo].[reoccurring_command]
SET enabled = 0
WHERE command_id = 'A6B7F147-7CD8-4802-9E8B-AF2FBC8D40F0'
GO
DELETE FROM [idm].[dbo].[configuration]
  WHERE [key] = 'DataRetention'
  
DELETE FROM [idm].[RoundhousE].[ScriptsRun]
WHERE script_name = '01.058.sql'

DELETE FROM [connect].[RoundhousE].[ScriptsRun]
WHERE script_name = '01.222.sql'

DELETE FROM [vms].[RoundhousE].[ScriptsRun]
WHERE script_name = '01.224.sql'

DELETE FROM [logging].[dbo].[amag_bash_scripts]
WHERE name IN ('01.099.FixIdentityCategoriesForAllGroupsCommand.sh')

UPDATE [quartz_masstransit].[dbo].[reoccurring_command]
SET enabled = 1
WHERE command_id = 'A6B7F147-7CD8-4802-9E8B-AF2FBC8D40F0'

Symmetry Integration Client:

The AMAG.Symmetry.Client has been updated to version 7.31.0.1921. Certain new features or corrections will not be fully functional until the new client has been installed; any such items will be highlighted in the proceeding notes.

The Checksum for this Symmetry client is:

7787e43d4a623686a1c325c26a08896151efacbf2164147e376395539b7f903d.

Warning

Customers who utilize firewalls for their Amag.Symmetry.Client will be required to update rules to allow TCP port 5671, 5672 & 443.

New / Changed Functionality

As part of our continued efforts to improve IDM, some new features have been introduced: Data Retention Settings give you greater control over how identity-related data is managed and automatically removed over time.

Administrators can now define retention periods for:

  • Identity Records

    • Suspended identities

    • Terminated identities

    • Expired identities

    • Visitors

The configuration can be found under the following menu: Configuration > System Settings > Data Retention

chrome_ztQj1aZX36.png
chrome_VBq4BGoz4Q.png
  • Automatic data Cleanup

    • The system will automatically remove records based on your configured retention policies:

    • Suspended Identities

      Removed after remaining in a suspended state for the defined period.

    • Terminated Identities

      Removed after continuous termination for the configured duration.

    • Expired Identities

      Removed after remaining expired for the configured duration.

    • Visitors

      Removed if inactive, with no past or upcoming visits, for the configured period.

    • Identity Upload Lists

      Automatically deleted after 1 month.

  • Audit and Logging

    Audit and LoggingAll retention-related actions are fully tracked for transparency and compliance:

    • Each deletion is logged with:

      • Timestamp

      • Identity ID

      • Action Type (delete)

      • Initiator (system or user)

    • Deletions are recorded in the Identity Audit Report, clearly indicating when records are removed due to retention policies.

  • Compliance

    • These enhancements support key regulatory standards, including:

      • SOC 2

      • GDPR

      • HIPAA

Issues Addressed

  • ZD233882 - An issue has been addressed where Barcodes on CONNECT badges were not reading the assigned field value.

  • ZD233323 - An issue has been addressed with the Swagger Documentation relating to Roles.

  • ZD232989 - An issue has been addressed with incorrect identity selection for ACRM Role assignments.

  • ZD232670 - An issue has been addressed with My Audits and clearing campaign filters.

  • ZD232055 - An issue has been addressed with 2 sided badges shrinking to one side.

  • ZD231720 - An issue has been addressed with Identity Photos not appearing in IDM when taken from print badge module.

  • ZD231268 - An issue has been addressed where older overdue audits were appearing in current audits.

  • ZD231718 - An issue has been addressed where Deleted photos from IDM were not being removed from Wallet Credentials.

  • ZD231378 - An issue has been addressed where Access Groups were not being displayed or removed on Identities using Bulk Add/Remove Access until UI refresh.

  • ZD231169 - An issue has been addressed where incorrect categories were being shown on identities in Dropdowns

  • ZD230859 - An issue has been addressed in the CONNECT 2.0 view for Edit Identities as Tenant Manager.

  • ZD230879 - An issue has been addressed where selecting the Config icon does not take the use back to main configuration page.

  • An issue has been addressed where Access Requests were able to be approved after the Request expired.