Resolución de problemasAcceso a registrosErrores

"Insufficient access rights on cross-reference id": cómo resolverlo

Qué significa el error "insufficient access rights on cross-reference id" de Salesforce, las cinco causas que lo provocan y cómo resolverlo paso a paso.

AgentForceAccess 4 min de lectura
Dos iconos de registro unidos por un haz de luz roto y chispeante con un símbolo de advertencia y un candado

INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY: insufficient access rights on cross-reference id es uno de los errores que más se malinterpretan en Salesforce. El instinto es comprobar los permisos sobre el registro que estás guardando, pero el error casi nunca tiene que ver con ese registro. Tiene que ver con un registro distinto al que este apunta.

Esta guía explica qué significa el mensaje y te ofrece una forma repetible de resolverlo.

Qué significa realmente el error

Cuando insertas o actualizas un registro, Salesforce también comprueba todos los registros a los que hace referencia, a través de campos de búsqueda o maestro-detalle, la propiedad o las operaciones de listas relacionadas. Si el usuario en ejecución no puede acceder a uno de esos registros referenciados, toda la operación se rechaza con insufficient access rights on cross-reference id: <id>.

El <id> es el ID de 15 o 18 caracteres del registro al que el usuario no puede llegar, no el que se está guardando. Esa distinción es la clave para resolverlo.

Traduce el mensaje como: “El usuario que ejecuta esta acción no puede acceder al registro relacionado <id> al que apunta este registro.”

Paso 0: identifica el registro de referencia cruzada

Copia el ID del error y ábrelo directamente:

https://tudominio.my.salesforce.com/<id>

Ahora ya sabes qué objeto y qué registro te está bloqueando (una Account principal, un Contact en un campo de búsqueda, un propietario, un Case relacionado, etc.). Cada paso siguiente apunta a ese registro.

Las cinco causas, por orden de probabilidad

1. Falta de permiso de objeto

El perfil o los conjuntos de permisos del usuario carecen de Read (o Create/Edit) sobre el objeto referenciado. Los permisos de objeto son la puerta que se evalúa antes que la compartición: consulta permisos de objeto frente a compartición de registros. Otorga el CRUD necesario mediante un conjunto de permisos.

2. Seguridad a nivel de campo en el campo de búsqueda

El usuario no puede ver ni editar el campo que contiene la referencia. Si la FLS oculta el campo de búsqueda, la escritura sobre él falla. Comprueba la seguridad a nivel de campo de ese campo en el perfil o los conjuntos de permisos del usuario.

3. Sin acceso al registro referenciado (compartición)

El usuario tiene acceso al objeto pero no acceso al registro específico relacionado. Causas: un valor predeterminado de toda la organización Privado sin regla de compartición, o que el usuario no esté por encima del propietario en la jerarquía de funciones. Confírmalo con el botón Sharing del registro relacionado y, a continuación, amplía el acceso con una regla de compartición, un equipo o una compartición manual.

4. Automatización ejecutándose en el contexto del usuario

Los flujos configurados para ejecutarse con “How to run the flow → in user context”, o el código Apex declarado with sharing, aplican los permisos del usuario en ejecución. Si ese usuario no puede llegar al registro relacionado, la automatización falla con este error aunque un administrador lo haya probado sin problemas.

  • Solución A (recomendada cuando proceda): ejecuta el Flow en contexto de sistema / Apex without sharing, de modo que la automatización no quede limitada por el usuario en ejecución; úsala solo cuando el usuario legítimamente no deba necesitar acceso directo.
  • Solución B: otorga realmente al usuario acceso al registro relacionado (causas 1 a 3).

5. Una referencia eliminada, vacía o mal formada

El campo de búsqueda apunta a un registro que se eliminó, que nunca existió, o el ID está vacío o es incorrecto (algo habitual en cargas de datos e integraciones). Salesforce notifica los registros inexistentes como acceso insuficiente. Valida que el ID se resuelva a un registro activo antes de guardar.

Una lista de comprobación repetible para la solución

  1. Extrae el <id> del error y ábrelo: identifica el objeto y el registro.
  2. ¿Tiene el usuario Read/Edit de objeto sobre ese objeto? → corrige el perfil o el conjunto de permisos.
  3. ¿Tiene el usuario seguridad a nivel de campo sobre el campo de búsqueda? → corrige la FLS.
  4. ¿Tiene el usuario acceso al registro específico? → comprueba el botón Sharing; añade una compartición.
  5. ¿Hay una automatización ejecutándose en contexto de usuario? → decide entre el contexto de sistema y otorgar el acceso.
  6. ¿Sigue resolviéndose el ID referenciado a un registro activo? → corrige los datos o la integración.

La primera comprobación que falle es tu causa raíz.

Por qué este error es en realidad un problema de rastreo de accesos

Cada una de las causas anteriores responde a la misma pregunta de fondo: ¿tiene realmente este usuario acceso a ese registro relacionado y a través de qué mecanismo? Eso es tedioso de responder a mano entre CRUD, FLS y seis mecanismos de compartición.

AgentForceAccess lo responde en lenguaje claro: pega el usuario y el registro, y rastrea exactamente qué permiso o compartición otorga (o bloquea) el acceso, para que dejes de adivinar cuál de las cinco causas tienes delante.

Preguntas frecuentes

¿A qué se refiere realmente el "cross-reference id"?

Es el ID de registro de Salesforce del registro *relacionado* al que apunta tu acción a través de un campo de búsqueda o maestro-detalle. El usuario en ejecución no tiene acceso a ese registro, por lo que se rechaza el guardado. Añade el ID a la URL de tu org (https://tudominio.my.salesforce.com/<id>) para identificarlo.

¿Por qué la misma acción funciona para un administrador pero falla para un usuario estándar?

Los administradores suelen tener "View All"/"Modify All" o "Modify All Data", que eluden el modelo de compartición. Al usuario estándar lo bloquean los permisos de objeto, la seguridad a nivel de campo o la compartición a nivel de registro del registro relacionado. Reproduce la acción como el usuario afectado para aislarlo.

¿Ejecutar un Flow en contexto de sistema oculta un problema real de permisos?

Puede hacerlo. El contexto de sistema ignora la compartición y el CRUD/FLS del usuario en ejecución, lo que corrige el error pero puede otorgar un acceso que el usuario no debería tener a través de la interfaz. Úsalo de forma deliberada y confirma que el usuario realmente debería poder llegar al registro relacionado.

¿Puede provenir este error de un registro eliminado o inexistente?

Sí. Si el campo de búsqueda apunta a un registro que se eliminó, que nunca existió, o el ID está vacío o mal formado, Salesforce lo notifica como acceso insuficiente en lugar de "no encontrado". Verifica que el ID referenciado siga resolviéndose a un registro activo.

Míralo en tu propia organización

AgentForceAccess explica, en lenguaje claro, por qué cualquier usuario puede ver cualquier registro o archivo, recorriendo todos los mecanismos de colaboración de Salesforce.

Solicitar acceso anticipado