「insufficient access rights on object id」の解決方法
Salesforceの「insufficient access rights on object id」エラーの意味、cross-reference版との違い、そして段階的な解決手順をわかりやすく解説します。
INSUFFICIENT_ACCESS_OR_READONLY: insufficient access rights on object id は、cross-reference 版とほとんど同じに見えますが、指している問題は異なります。こちらはあなたが直接操作しているレコードに関するものです。ユーザーが単にそのレコードに書き込めないのです。
このガイドでは、このメッセージが何を意味するのか、cross-reference 版とどう見分けるのか、そして繰り返し使える解決方法を紹介します。
このエラーが実際に意味すること
ユーザーがレコードを挿入、更新、または削除するとき、Salesforce は書き込みを許可する前に2つのことをチェックします。ユーザーのオブジェクト権限 (CRUD) と、レコードレベルのアクセス (共有) です。保存しようとしているレコードに対してどちらかが欠けている場合、操作は次のように拒否されます:
INSUFFICIENT_ACCESS_OR_READONLY: insufficient access rights on object id: <id>
<id> は、あなたが保存しようとしたレコードの15桁または18桁のIDであり、関連レコードのものではありません。実行ユーザーはそれを見ることができ、参照することさえできるかもしれませんが、それに対する書き込みアクセスを持っていません。
このメッセージは次のように読み替えてください: 「この操作を実行しているユーザーは、自身が操作しているレコード
<id>を編集 (または削除) できません。」
「object id」と「cross-reference id」を混同しないこと
この2つのエラーは兄弟関係にあり、絶えず混同されます:
insufficient access rights on object id | insufficient access rights on cross-reference id | |
|---|---|---|
| どのレコードがブロックしているか? | 保存しようとしているレコード | それが指している 関連 レコード (lookup / master-detail) |
| 典型的なエラーコード | INSUFFICIENT_ACCESS_OR_READONLY | INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY |
| 最初に修正すべきもの | このレコード への編集/削除アクセス | 関連 レコードへの参照アクセス |
メッセージ中のIDが、あなたが保存ボタンを押したレコードであれば、この記事が正解です。それが親、所有者、または lookup で参照されたレコードであれば、代わりに insufficient access rights on cross-reference id を参照してください。
ステップ 0 — レコードを特定する
エラーからIDをコピーし、直接開きます:
https://yourdomain.my.salesforce.com/<id>
それが保存しようとしていたオブジェクトとレコードであることを確認してください。以下のすべては、その レコードへの書き込みアクセスを対象としています。
発生しやすい順に並べた4つの原因
1. オブジェクト権限 (CRUD) の不足
ユーザーのプロファイルまたは権限セットが、オブジェクトに対する編集 (または削除) を持っていません。オブジェクト権限は、共有が評価されるよりも前に通過するゲートです。ユーザーが完全なレコードアクセスを持っていても、編集が付与されていなければブロックされる可能性があります。オブジェクト権限とレコード共有の違いを参照してください。権限セットを通じて必要な CRUD を付与しましょう。
2. 読み取り専用、またはレコードアクセスがない (共有)
ユーザーはオブジェクトの編集権限を持っているものの、この特定のレコード に対しては参照アクセスのみ、またはアクセスがありません。よくある原因:
- 共有ルールがユーザーに届かない非公開の組織の共有設定 (OWD)。
- ユーザーがロール階層上で所有者より上位にいないこと。
- レコードが参照のみとして共有されている (共有ルール、チーム、または手動共有)。これは開くことはできても保存はできません。
レコードの共有ボタンで確認し、共有ルール、チーム、または手動共有で読み書きアクセスに拡張してください。ここでの参照と読み書きの違いこそが、「開ける」と「保存できる」を分けるものです。
3. master-detail 親への編集アクセスがない
レコードが master-detail リレーションの詳細側である場合、その編集には親へのアクセスが必要です。親を参照することしかできない (またはまったく見られない) ユーザーは、子を保存できません。Salesforce はこれを子のオブジェクトIDに対するアクセス権不足として報告します。ユーザーに親レコードへの読み書きアクセスを付与してください。
4. ロック中または承認待ちのレコード
アクティブな承認プロセスによって、または Apex の lock によってロックされたレコードは、承認、取り消し、またはロック解除されるまで、誰も (管理者を除く) 編集できません。これは、本当に編集アクセスを持つユーザーであっても同じエラーを生み出します。権限に手を付ける前に、レコードの承認履歴を確認してください。
補足の原因 — ユーザーコンテキストで実行される自動化。「ユーザーコンテキストで実行」に設定された Flow や、
with sharingで宣言された Apex は、実行ユーザーのアクセス権を適用します。そのユーザーがレコードに書き込めない場合、管理者がテストでは問題なく動作した場合でも、自動化はこのエラーで失敗します。自動化をシステムコンテキストで実行するか、ユーザーに実際のアクセス権を付与してください (原因 1〜3)。
繰り返し使える解決チェックリスト
- エラーから
<id>を取り出して開く → どのレコードが失敗したかを特定する。 - レコードは承認プロセス中/ロック中か? → まずそれを解決する。
- ユーザーはそのオブジェクトに対する編集/削除権限を持っているか? → プロファイル/権限セットを修正する。
- ユーザーは読み書きのレコードアクセス (参照だけでなく) を持っているか? → 共有ボタンを確認し、読み書き共有を追加する。
- それは master-detail の子か? → 親に対する読み書きを付与する。
- 自動化がユーザーコンテキストで実行されているか? → システムコンテキストにするか、アクセス権を付与するかを判断する。
最初に失敗したチェックが、根本原因です。
このエラーが本質的にアクセス追跡の問題である理由
上記のすべての原因は、同じ根本的な問いに帰着します: このユーザーは本当にこのレコードへの書き込みアクセスを持っているのか、そしてどの仕組みを通じて持っているのか? これを CRUD、所有権、ロール階層、そして6つの共有メカニズムにわたって手作業で答えるのは骨の折れる作業です。特に、参照と読み書きの違いが鍵となる場合はなおさらです。
AgentForceAccess はこれをわかりやすい言葉で答えます。ユーザーとレコードを貼り付けるだけで、どの権限または共有が書き込みアクセスを付与 (またはブロック) しているのかを正確に追跡するため、どの原因を扱っているのかを推測する必要がなくなります。
よくある質問
「insufficient access rights on object id」と「on cross-reference id」の違いは何ですか?
「on object id」は、あなたが直接挿入、更新、または削除しているレコードに関するものです。ユーザーが *そのレコード* に対する編集/削除権限を持っていません。「on cross-reference id」は、lookup や master-detail 項目を通じて到達する *関連* レコードに関するものです。同じ系統のエラーですが、対象が逆です。メッセージ中のIDが、あなたが保存ボタンを押したレコードであれば、それは object-id 版です。
管理者はレコードを編集できるのに、標準ユーザーがこのエラーになるのはなぜですか?
管理者は通常、オブジェクトに対する「すべてのデータの変更」または「すべて変更」を持っており、これらは組織の共有設定 (OWD)、共有ルール、ロール階層をバイパスします。標準ユーザーは、オブジェクト権限またはレコードレベルの共有によってブロックされています。問題を切り分けるには、必ず影響を受けるユーザーとしてログインして (または「ログイン」機能を使って) 操作を再現してください。
ユーザーはレコードへの参照アクセスを持っているのに、なぜ保存時にアクセス権不足になるのですか?
参照だけでは書き込みには不十分です。編集または削除には、編集/削除のオブジェクト権限 *かつ* 読み書きのレコードアクセスが必要です。「参照のみ」として共有されたレコード (共有ルール、ロール階層、または手動共有による) は、ユーザーが開くことはできても変更を保存することはできず、これが更新時のアクセス権不足として表面化します。
ロック中または承認待ちのレコードがこのエラーを引き起こすことはありますか?
はい。アクティブな承認プロセス (または Apex のロック) によってレコードがロックされている間は、編集アクセスを持つユーザーであっても、承認、取り消し、またはロック解除されるまで保存できません。権限を追う前に、レコードが承認プロセス中かどうかを確認してください。
あなたの組織で試してみる
AgentForceAccessは、あらゆるユーザーがあらゆるレコードやファイルを見られる理由を、Salesforceのすべての共有の仕組みを横断して、わかりやすい言葉で説明します。
先行アクセスを申し込む