トラブルシューティングレコードアクセスエラー

「insufficient access rights on cross-reference id」の解決方法

Salesforceの「insufficient access rights on cross-reference id」エラーの意味、発生する5つの原因、そして段階的な解決手順をわかりやすく解説します。

AgentForceAccess 1 分で読めます
壊れて火花を散らす光の線でつながれた2つのレコードアイコン、警告マークと南京錠付き

INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY: insufficient access rights on cross-reference id は、Salesforce で最も誤解されやすいエラーの1つです。多くの人はまず、保存しようとしているレコードの権限を確認しようとします。しかし、このエラーがそのレコード自体に関するものであることは、ほとんどありません。問題は、そのレコードが指している別のレコードにあるのです。

このガイドでは、このメッセージが何を意味するのかを説明し、繰り返し使える解決方法を紹介します。

このエラーが実際に意味すること

レコードを挿入または更新するとき、Salesforce はそのレコードが参照しているすべてのレコードも併せてチェックします。lookup や master-detail 項目、所有権、または関連リストの操作を通じた参照です。実行ユーザーがこれらの参照先レコードのいずれかにアクセスできない場合、操作全体が insufficient access rights on cross-reference id: <id> として拒否されます。

<id> は、ユーザーが到達できないレコードの15桁または18桁のIDであり、保存しようとしているレコードのIDではありません。この区別こそが、解決の鍵のすべてです。

このメッセージは次のように読み替えてください: 「この操作を実行しているユーザーは、このレコードが指している関連レコード <id> にアクセスできません。」

ステップ 0 — cross-reference レコードを特定する

エラーからIDをコピーし、直接開きます:

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

これで、どのオブジェクトのどのレコードがあなたをブロックしているかがわかります (親 Account、lookup 上の Contact、所有者、関連する Case など)。以下のすべてのステップは、その レコードを対象としています。

発生しやすい順に並べた5つの原因

1. オブジェクト権限の不足

ユーザーのプロファイルまたは権限セットが、参照先オブジェクトに対する参照(または作成/編集)権限を持っていません。オブジェクト権限は、共有が評価されるよりも前に通過する必要のあるゲートです。オブジェクト権限とレコード共有の違いを参照してください。権限セットを通じて必要な CRUD を付与しましょう。

2. lookup 項目に対する項目レベルセキュリティ

ユーザーが、参照を保持している項目を表示または編集できません。FLS が lookup 項目を非表示にしている場合、その項目への書き込みは失敗します。ユーザーのプロファイル/権限セットでその項目の項目レベルセキュリティを確認してください。

3. 参照先レコードへのアクセス権がない (共有)

ユーザーはオブジェクトアクセスを持っているものの、その特定の関連レコードに対するレコードアクセスを持っていません。原因: 共有ルールのない非公開の組織の共有設定 (OWD)、またはユーザーがロール階層上で所有者より上位にいないこと、などです。関連レコードの共有ボタンで確認し、共有ルール、チーム、または手動共有でアクセス権を拡張してください。

4. ユーザーコンテキストで実行される自動化

**「フローの実行方法 → ユーザーコンテキストで実行」**に設定された Flow や、with sharing で宣言された Apex は、実行ユーザーの権限を適用します。そのユーザーが関連レコードに到達できない場合、管理者がテストでは問題なく動作した場合でも、自動化はこのエラーで失敗します。

  • 対処法 A (適切な場合に推奨): Flow をシステムコンテキストで、Apex を without sharing で実行し、自動化が実行ユーザーによって制限されないようにします。ユーザーが正当に直接アクセスを必要としない場合にのみ使用してください。
  • 対処法 B: 実際に関連レコードへのアクセス権をユーザーに付与します (原因 1〜3)。

5. 削除済み、空白、または不正な形式の参照

lookup が、削除されたレコード、もともと存在しないレコードを指しているか、IDが空/誤っています (データロードや連携でよく発生します)。Salesforce は、見つからないレコードをアクセス権不足として報告します。保存する前に、IDが有効なレコードに解決されることを検証してください。

繰り返し使える解決チェックリスト

  1. エラーから <id> を取り出して開く → オブジェクトとレコードを特定する。
  2. ユーザーはそのオブジェクトに対する参照/編集権限を持っているか? → プロファイル/権限セットを修正する。
  3. ユーザーは lookup 項目に対する項目レベルセキュリティを持っているか? → FLS を修正する。
  4. ユーザーはその特定のレコードへのレコードアクセスを持っているか? → 共有ボタンを確認し、共有を追加する。
  5. 自動化がユーザーコンテキストで実行されているか? → システムコンテキストにするか、アクセス権を付与するかを判断する。
  6. 参照先のIDは今も有効なレコードに解決されるか? → データ/連携を修正する。

最初に失敗したチェックが、根本原因です。

このエラーが本質的にアクセス追跡の問題である理由

上記のすべての原因は、同じ根本的な問いに帰着します: このユーザーは本当にその関連レコードにアクセスできるのか、そしてどの仕組みを通じてアクセスできるのか? これを CRUD、FLS、そして6つの共有メカニズムにわたって手作業で答えるのは骨の折れる作業です。

AgentForceAccess はこれをわかりやすい言葉で答えます。ユーザーとレコードを貼り付けるだけで、どの権限または共有がアクセスを付与(またはブロック)しているのかを正確に追跡するため、5つの原因のどれを扱っているのかを推測する必要がなくなります。

よくある質問

「cross-reference id」とは具体的に何を指すのですか?

それは、あなたの操作が lookup または master-detail 項目を通じて指している *関連* レコードのSalesforceレコードIDです。実行ユーザーがそのレコードへのアクセス権を持っていないため、保存が拒否されます。組織のURLにIDを付加して (https://yourdomain.my.salesforce.com/<id>)、それが何かを特定してください。

同じ操作が管理者では成功するのに、標準ユーザーでは失敗するのはなぜですか?

管理者は通常「すべて表示」/「すべて変更」または「すべてのデータの変更」を持っており、これらは共有モデルをバイパスします。標準ユーザーは、関連レコードに対するオブジェクト権限、項目レベルセキュリティ、またはレコードレベルの共有によってブロックされています。問題を切り分けるには、影響を受けるユーザーとして操作を再現してください。

Flow をシステムコンテキストで実行すると、本当の権限問題が隠れてしまいませんか?

その可能性はあります。システムコンテキストは実行ユーザーの共有設定や CRUD/FLS を無視するため、エラーは解消しますが、UIから本来与えるべきでないアクセス権を付与してしまうこともあります。意図的に使用し、そのユーザーが本当に関連レコードに到達できるべきかどうかを確認してください。

このエラーは削除済みまたは存在しないレコードが原因で発生することもありますか?

はい。lookup が削除されたレコード、もともと存在しないレコードを指している場合、またはIDが空白/不正な形式の場合、Salesforce はそれを「見つかりません」ではなくアクセス権不足として報告します。参照されているIDが今も有効なレコードに解決されることを確認してください。

あなたの組織で試してみる

AgentForceAccessは、あらゆるユーザーがあらゆるレコードやファイルを見られる理由を、Salesforceのすべての共有の仕組みを横断して、わかりやすい言葉で説明します。

先行アクセスを申し込む