Hoe je INSUFFICIENT_ACCESS_OR_READONLY in Salesforce-deployments oplost

De gebruiker die de deployment of dataload uitvoert heeft geen create-, edit- of delete-rechten op het object of veld waarnaar wordt geschreven.

Komt voor bij: runtime DML, in dataloads, API-aanroepen en Apex-tests

Wat het betekent

INSUFFICIENT_ACCESS_OR_READONLY betekent dat het profiel of de permission set van de uitvoerende gebruiker niet het toegangsniveau verleent dat de bewerking nodig heeft, meestal field-level security of object-CRUD-rechten in de doel-org. Dit verschilt van INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY, dat gaat over een gerefereerd record in plaats van het object waarnaar direct wordt geschreven.

Dit is het directe-objectgeval: het record of veld waarnaar de DML-instructie schrijft is precies datgene waartoe de uitvoerende gebruiker geen toegang heeft, niet een gerelateerd record dat onderweg wordt geraakt.

Diagnose

Veelvoorkomende oorzaken

Profiel van integratie- of deploymentgebruiker mist objectrechten
Het profiel van de API- of CI-gebruiker heeft alleen-lezen of geen toegang tot het object, vaak omdat dit bewust beperkt was ingesteld voor de veiligheid.
Field-level security verbergt het veld voor dat profiel
Het objectrecht bestaat wel, maar een specifiek veld staat op onzichtbaar of alleen-lezen voor het profiel of de permission set van de uitvoerende gebruiker.
Permission set is niet gedeployed of toegewezen in de doel-org
Een permission set die de benodigde toegang verleent bestaat in de broncode, maar is nog niet gedeployed en toegewezen aan de deploymentgebruiker in de doel-org.

De oplossing

  1. Verleen object- en veldrechten aan de deploymentgebruiker
    Werk het profiel of de permission set van de deployment- of integratiegebruiker bij zodat deze de vereiste object-CRUD- en field-level security bevat.
  2. Deploy en wijs ontbrekende permission sets toe
    Neem permission set-metadata op in de deployment en bevestig dat deze is toegewezen aan de uitvoerende gebruiker in de doel-org, niet alleen in de bron.
    sf org assign permset --name Integration_Data_Access --target-org myOrgAlias
  3. Gebruik een specifieke integratiegebruiker met een stabiele permission set
    Standaardiseer deployment- en API-toegang op een speciaal daarvoor gebouwde gebruiker en permission set in plaats van het account van een individuele admin, dat kan veranderen.
In de praktijk

Hoe Serpent dit voorkomt

Serpent beheert de permission sets die het per org toewijst aan CI- en integratiegebruikers, zodat toegangshiaten tussen omgevingen naar voren komen als een taakblokkade in plaats van een mislukte pipelinerun. Zie de bibliotheek met Salesforce-deploymentfouten.

Goedkeurings- en audittraceerbaarheid in Serpent

Preventie

Deploy de permission set-toewijzing samen met de permission set zelf
Neem PermissionSetAssignment-metadata op in dezelfde deployment als een nieuwe permission set, zodat de toegang daadwerkelijk in de doel-org terechtkomt, niet alleen de definitie.
Controleer de toegang van de integratiegebruiker bij elk nieuw veld
Maak van een field-level security-controle op de permission set van de vaste integratiegebruiker een checklistitem bij elke schemawijziging, geen bijzaak achteraf.
Deel nooit een persoonlijke adminlogin voor geplande integraties
Persoonlijke accounts worden gedeactiveerd, MFA verandert en wachtwoorden worden gereset; een specifieke integratiegebruiker met een beheerde permission set voorkomt alle drie de faalscenario's.
Veelgestelde vragen

INSUFFICIENT_ACCESS_OR_READONLY, uitgelegd

Waarom werkt dezelfde deployment voor de ene admin wel, maar mislukt deze voor de CI-gebruiker?
De CI- of integratiegebruiker heeft bijna altijd een beperkter, strenger afgeschermd profiel dan een admin. Vergelijk de object- en veldtoegang ervan met waar de deployment daadwerkelijk naar schrijft.
Overschrijft een permission set een strengere profielinstelling?
Voor object- en veldrechten wel; een permission set kan extra toegang verlenen bovenop het profiel, maar niet meer dan de licentie- en featurelimieten van de org als geheel toestaan.
Betekent READONLY in de foutnaam dat het veld een formuleveld is?
Niet per se. Meestal betekent het dat de Field-Level Security van de gebruiker is ingesteld op alleen-lezen voor een gewoon bewerkbaar veld, al kan het ook gelden voor werkelijk niet-schrijfbare velden zoals formules.

Begin gratis. Geen creditcard, geen installatie, geen verplichtingen.

Binnen 15 minuten ingericht. Geen DevOps-specialist nodig.

Benieuwd naar sneller releasen voordat je instapt? Laten we praten

Vrijblijvend.