Environment
- SailPoint Identity Security Cloud (ISC)
- Connector: SQL Loader (JDBC / HXTT CSV Driver)
- Rule Type: JDBCProvision Rule
- Source: CSV file hosted on Azure Blob SFTP endpoint
- ISC Version: Current SaaS
Background
We are using the SQL Loader connector to provision identity data into a CSV file (vcdiscprd.csv) hosted on an Azure Blob SFTP endpoint. The provisioning is triggered via a dummy entitlement approach — a Provisioning attribute with a static value is assigned through an Access Profile, which in turn triggers the JDBC Provision Rule to write a row into the CSV.
The connector is working correctly in the following scenario:
- When a user manually requests access via the Request Center → provisioning fires → row is written to CSV

Issue
We assigned a Birthright (BR) Role containing the Access Profile to 568 identities. All 568 identities:
- Have the role assigned

- Show the Access Profile and entitlement on their Access tab

- Show a VW-Export-PROD account under their Accounts tab

- Show COMMITTED status in Provisioning Activity

However, only 261 rows were written to the CSV file. The remaining 307 identities have an account in ISC but no corresponding row in the CSV.
Key Observations
- The CSV file started completely empty — all 261 rows were created by our JDBC Provision Rule, confirmed by reviewing the file.
- All 568 provisioning activities show as COMMITTED — no failures or errors visible in ISC.
- When tested via Request Center (manual access request) — provisioning works perfectly and the row is written to CSV every time.
- The 307 missing identities are pre-existing identities in ISC with valid
identificationNumber(emploeeNumber) values — null employee number is not the issue. - Our investigation suggests that the 307 identities already had a correlated account on the VW-Export-PROD source in ISC from a previous aggregation. When the BR role was assigned, ISC did not fire a Create provisioning request for these identities because it considered them as already having an account on the source.
- The 261 identities who got provisioned correctly did not have a pre-existing account on the source — so ISC fired a Create request for them.
Root Cause Hypothesis
When ISC detects that an identity already has a correlated account on a source, it skips the Create provisioning operation even if the actual CSV row does not exist. This creates a data inconsistency — ISC believes the account exists (because it was previously aggregated) but the physical CSV file has no corresponding row.
This behavior is correct from ISC’s perspective (no duplicate accounts) but problematic when the source CSV was empty/reset and the physical data no longer matches ISC’s account state.
JDBC Provision Rule
Our rule handles Create, Modify, Delete, Disable, Enable, Lock and Unlock operations. The Create branch inserts a new row into the CSV with the required attributes. The rule is working correctly as confirmed by manual request center testing.
Questions for the Community
- Is our root cause analysis correct — does ISC skip Create provisioning for identities who already have a correlated account on the source, even if the physical CSV row does not exist?
- Is there a supported way to force re-provisioning (Create) for identities who already have a correlated account — without having to delete and recreate their accounts in ISC?
- Would triggering Attribute Sync for the 307 missing identities send a Modify request to the JDBC rule? If yes, could the Modify branch be used to INSERT a new row if no existing row is found (upsert logic)?
- Is there a better architectural approach for using SQL Loader as a provisioning target where the source CSV may be periodically reset or emptied?
- Has anyone else faced a similar gap between ISC account state and physical CSV file state when using SQL Loader?
What We Have Already Tried
- Fixed CSV separator (
_CSV_Separator=,) — no trailing spaces
- Fixed JDBC Provision Rule — correct
AccountRequest.Operationenum usage
- Fixed SFTP password URL encoding (
%2Ffor/)
- Confirmed all provisioning activities show COMMITTED

- Confirmed manual Request Center provisioning works correctly

Any guidance or similar experiences from the community would be greatly appreciated. Thank you!