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]
GOUSE 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]
ENDWarning
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'
GODELETE 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


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.