Saviynt unveils its cutting-edge Intelligence Suite products to revolutionize Identity Security!
Click HERE to see how Saviynt Intelligence is transforming the industry.
Saviynt Copilot Icon

SAV4SAV Connection Deleting Active Accounts

aidanryan
Regular Contributor
Regular Contributor

Hello,

We are running into an issue where our SAV4SAV connector is deleting SAV4SAV accounts for active users. I have included our JSONs below. We aren't able to find in the logs as to why it is doing this either.

 

IMPORTACCOUNTJSON:

{
    "acctEntParams": {
        "entTypes": {
            "Organization": {
                "call": {
                    "call1": {
                        "callOrder": 0,
                        "processingType": "entToAcctMapping",
                        "stageNumber": 0
                    }
                }
            },
            "Roles": {
                "call": {
                    "call1": {
                        "callOrder": 0,
                        "processingType": "entToAcctMapping",
                        "stageNumber": 0
                    }
                }
            },
            "SAVRoles": {
                "call": {
                    "call1": {
                        "acctKeyField": "accountID",
                        "callOrder": 0,
                        "processingType": "httpEntToAcct",
                        "pagination": {
                            "offset": {
                                "totalCountPath": 99999,
                                "batchParam": "limit",
                                "batchSize": 500,
                                "offsetParam": "offset"
                            }
                        },
                        "listField": "users",
                        "http": {
                            "httpContentType": "application/json",
                            "httpHeaders": {
                                "Authorization": "${access_token}"
                            },
                            "httpMethod": "GET",
                            "url": "https://domain.saviyntcloud.com/ECMv6/api/userms/savroles/${id}/users"
                        },
                        "entKeyField": "entitlementID",
                        "acctIdPath": "username",
                        "connection": "userAuth",
                        "stageNumber": 1
                    }
                }
            },
            "UserGroups": {
                "call": {
                    "call1": {
                        "callOrder": 0,
                        "processingType": "entToAcctMapping",
                        "stageNumber": 0
                    }
                }
            }
        }
    },
    "entitlementParams": {
        "entTypes": {
            "Organization": {
                "call": {
                    "call1": {
                        "keyField": "entitlementID",
                        "callOrder": 0,
                        "pagination": {
                            "offset": {
                                "totalCountPath": "completeResponseMap.totalcount",
                                "batchParam": "max",
                                "batchSize": 500,
                                "offsetParam": "offset"
                            }
                        },
                        "listField": "organizations",
                        "http": {
                            "httpParams": "",
                            "httpContentType": "application/json",
                            "httpHeaders": {
                                "Authorization": "${access_token}",
                                "Accept": "application/json"
                            },
                            "httpMethod": "GET",
                            "url": "https://domain.saviyntcloud.com/ECM/api/v5/getOrganization"
                        },
                        "stageNumber": 0,
                        "colsToPropsMap": {
                            "acctEntMappingInfoColumnFromEnt": "STORE#ACC#ENT#MAPPINGINFO~#~char",
                            "entitlementID": "organizationname~#~char",
                            "entitlement_value": "organizationname~#~char"
                        }
                    }
                },
                "acctEntMappings": {
                    "keyField": "accountID",
                    "idPath": "username",
                    "listField": "organizationowners",
                    "importAsAccount": false
                },
                "entTypeOrder": 1
            },
            "Roles": {
                "call": {
                    "call1": {
                        "keyField": "entitlementID",
                        "callOrder": 0,
                        "pagination": {
                            "offset": {
                                "totalCountPath": "completeResponseMap.totalCount",
                                "batchParam": "max",
                                "batchSize": 500,
                                "offsetParam": "offset"
                            }
                        },
                        "listField": "Roledetails",
                        "http": {
                            "httpParams": "",
                            "httpContentType": "application/json",
                            "httpHeaders": {
                                "Authorization": "${access_token}",
                                "Accept": "application/json"
                            },
                            "httpMethod": "POST",
                            "url": "https://domain.saviyntcloud.com/ECM/api/v5/getRoles"
                        },
                        "stageNumber": 0,
                        "colsToPropsMap": {
                            "customproperty2": "role_name~#~char",
                            "customproperty1": "roleKey~#~char",
                            "acctEntMappingInfoColumnFromEnt": "STORE#ACC#ENT#MAPPINGINFO~#~char",
                            "entitlementID": "roleKey~#~char",
                            "entitlement_value": "role_name~#~char"
                        }
                    }
                },
                "acctEntMappings": {
                    "keyField": "accountID",
                    "idPath": "ownername",
                    "listField": "owner",
                    "importAsAccount": false
                },
                "entTypeOrder": 0
            },
            "SAVRoles": {
                "call": {
                    "call1": {
                        "keyField": "entitlementID",
                        "callOrder": 0,
                        "listField": "savroles",
                        "http": {
                            "successResponses": {
                                "statusCode": [
                                    200,
                                    201
                                ]
                            },
                            "httpContentType": "application/json",
                            "httpHeaders": {
                                "Authorization": "${access_token}",
                                "Accept": "application/json"
                            },
                            "httpMethod": "GET",
                            "url": "https://domain.saviyntcloud.com/ECMv6/api/userms/savroles"
                        },
                        "stageNumber": 0,
                        "colsToPropsMap": {
                            "customproperty1": "CUSTOMPROPERTY1~#~char",
                            "entitlementID": "ROLENAME~#~char",
                            "entitlement_value": "ROLENAME~#~char"
                        }
                    }
                },
                "entTypeOrder": 0
            },
            "UserGroups": {
                "call": {
                    "call1": {
                        "keyField": "entitlementID",
                        "callOrder": 0,
                        "pagination": {
                            "offset": {
                                "totalCountPath": "completeResponseMap.totalcount",
                                "batchParam": "max",
                                "batchSize": 500,
                                "offsetParam": "offset"
                            }
                        },
                        "listField": "usergroups",
                        "http": {
                            "httpParams": "",
                            "httpContentType": "application/json",
                            "httpHeaders": {
                                "Authorization": "${access_token}",
                                "Accept": "application/json"
                            },
                            "httpMethod": "POST",
                            "url": "https://domain.saviyntcloud.com/ECM/api/v5/fetchUserGroup"
                        },
                        "stageNumber": 0,
                        "colsToPropsMap": {
                            "acctEntMappingInfoColumnFromEnt": "STORE#ACC#ENT#MAPPINGINFO~#~char",
                            "entitlementID": "usergroupkey~#~char",
                            "entitlement_value": "user_groupname~#~char"
                        }
                    }
                },
                "acctEntMappings": {
                    "keyField": "accountID",
                    "idPath": "username",
                    "listField": "owners",
                    "importAsAccount": false
                },
                "entTypeOrder": 2
            }
        },
        "processingType": "SequentialAndIterative",
        "connection": "userAuth"
    },
    "accountParams": {
        "call": {
            "call1": {
                "keyField": "accountID",
                "callOrder": 0,
                "pagination": {
                    "offset": {
                        "totalCountPath": 240000,
                        "batchParam": "max",
                        "batchSize": 500,
                        "offsetParam": "offset"
                    }
                },
                "listField": "results",
                "http": {
                    "httpContentType": "application/json",
                    "httpHeaders": {
                        "Authorization": "${access_token}",
                        "Accept": "application/json"
                    },
                    "httpMethod": "GET",
                    "url": "https://domain.saviyntcloud.com/ECM/api/v5/user?q=accountExpired:0&fields=username,email,displayname,statuskey&sort=username&order=desc"
                },
                "stageNumber": 0,
                "colsToPropsMap": {
                    "accountID": "username~#~char",
                    "customproperty2": "email~#~char",
                    "customproperty11": "statuskey~#~char",
                    "displayName": "displayname~#~char",
                    "name": "username~#~char",
                    "status": "active~#~char"
                }
            }
        },
        "processingType": "SequentialAndIterative",
        "connection": "userAuth",
        "statusAndThresholdConfig": {
            "inactivateAccountsNotInFile": false,
            "activeStatus": [
                1
            ],
            "deleteAccEntForActiveAccounts": false,
            "statusColumn": "customproperty11",
            "accountThresholdValue": 30000,
            "correlateInactiveAccounts": true,
            "deleteLinks": false
        }
    }
}

RemoveAccountJSON:

{
    "call": [
        {
            "name": "call1",
            "connection": "userAuth",
            "url": "https://domain.saviyntcloud.com/ECM/api/v5/updateUser",
            "httpMethod": "POST",
            "httpParams": "{\"username\":\"${user.username}\",\"statuskey\":\"0\"}",
            "httpHeaders": {
                "Authorization": "${access_token}"
            },
            "httpContentType": "application/json",
            "successResponses": [
                {
                    "message": "User Updated Successfully"
                }
            ]
        }
    ]
}

 

6 REPLIES 6

rushikeshvartak
All-Star
All-Star
  • Does it deleting after import ? if yes share status threshold config 
  • Does it creating tasks ? - check source of task.

Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

Hey @rushikeshvartak Yes, it is deleting after running the import, and it is not creating tasks. We don't have anything for the status threshold config. We followed this guide HERE.

It was fine until a couple weeks ago when it started randomly deleting accounts for active users.

 

  • validate logs to find error
  • Assuming deleting means marking account as SUSPENDED.

Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

aidanryan
Regular Contributor
Regular Contributor

@rushikeshvartak That's the issue, we reviewed the logs at the day/time it happened, and there are no records for some reason. We tried job ID, accountID, userID. Checking the time when the job ran, and there is nothing. Not even a task is generated. 

Import will not generate tasks. Please share logs towards job ending


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

Hey @rushikeshvartak this isn't the best place to share logs as it is a public forum. I ended up submitting a ticket on this issue. Thank you.