SalesforceでカスタムのApexアクション(Apex Action)を実行した際に、権限不足を示すエラーが表示されることがあります。このエラーは、ユーザーがApexクラス自体を呼び出す権限を持っていないか、操作対象のデータに対する共有設定が不足しているために発生します。多くの場合、権限セット(Permission Set)や共有設定(Sharing Settings)の見直しで解決できますが、どこを確認すればよいか迷う方も少なくありません。本記事では、Apexアクションで権限不足が発生したときに確認するべき権限セットと共有設定のポイントを、具体的な手順とともに解説します。
【要点】この記事で確認すること
- 最初に見る場所: エラーとなったApexアクションの「権限セット」で、Apexクラス権限が割り当てられているか
- 切り分けの軸: エラーが「Apexクラスへのアクセス権限不足」なのか「共有設定によるデータアクセス不可」なのかを見極める
- 注意点: 権限セットの変更はシステム管理者のみ可能。会社のセキュリティポリシーに従い、安易にwithout sharing化しない
ADVERTISEMENT
目次
なぜApexアクションで権限不足が発生するのか
Apexアクションは、ユーザーが実行できるApexクラスのメソッドを指します。この実行には、大きく分けて二つの権限要件があります。一つは「Apexクラスを実行する権限」、もう一つは「そのクラスが処理するデータにアクセスする権限」です。前者は権限セットで付与され、後者はオブジェクト権限や共有設定に依存します。例えば、権限セットでApexクラス権限を与えていても、操作対象のレコードに対する読み取り権限がない場合、ユーザーはエラーになります。また、Apexクラスに「with sharing」が指定されていると、ユーザーの共有設定に基づいたデータアクセス制御が行われ、意図した結果が得られないこともあります。
確認すべき権限セットの設定
権限セットは、ユーザーに追加の権限を付与するための管理ツールです。Apexアクションの権限不足が疑われる場合、まずは権限セットが正しく構成されているかを確認します。
Apexクラス権限の割り当て
Apexアクションを実行するには、該当するApexクラスに対する「Apexクラス権限」が必要です。これは権限セットの「システム権限」ではなく、「Apexクラスのアクセス」設定で個別に有効化します。手順は以下のとおりです。
- Salesforceの設定画面(歯車アイコン)から「権限セット」を開きます。
- 問題のユーザーに割り当てられている権限セットを選択します。
- 「Apexクラスのアクセス」をクリックし、「編集」ボタンを押します。
- 対象のApexクラス名を検索し、チェックボックスを有効にして保存します。
- 権限セットがユーザーに割り当てられていることを確認します。
この設定がないと、ユーザーはApexクラスを呼び出すことすらできず、権限不足エラーが発生します。
オブジェクト権限とフィールド権限
Apexクラスが特定のオブジェクト(例:取引先、商談)を操作する場合、そのオブジェクトに対する「読み取り」「作成」「編集」「削除」権限も必要です。権限セットの「オブジェクト設定」で、必要なCRUD権限が有効になっているかを確認してください。さらに、Apexクラスがアクセスする項目(フィールド)についても、フィールドレベルのセキュリティ(FLS)で読み取り・編集が許可されている必要があります。権限セットの「フィールドレベルのセキュリティ」から、対象オブジェクトの各項目が適切に設定されているか確認します。
共有設定(Sharing Settings)の確認ポイント
権限セットでApexクラス権限とオブジェクト権限が正しく設定されていても、共有設定が原因でデータにアクセスできないことがあります。Apexアクションが「with sharing」で定義されている場合、ユーザーの許可されたデータ(自身が所有するレコードや共有ルールでアクセス可能なレコード)のみが操作対象となります。
組織の共有設定
各オブジェクトの「組織の共有設定」が「公開/参照のみ」や「公開/編集可能」になっているか、「非公開」になっているかを確認します。非公開の設定では、ユーザーは明示的に共有されたレコードにしかアクセスできません。Apexアクションが全社的なデータを扱う予定であれば、共有ルールや権限セットによる組織全体のアクセス権を付与する必要があります。
共有ルールと手動共有
必要なデータが特定のグループやロールにのみ共有されている場合、Apexアクションの実行ユーザーがそのグループに所属しているかを確認します。共有ルールは「設定」→「共有設定」→「共有ルール」で確認できます。また、手動共有(個別のレコードに対する共有)が設定されているケースもあります。これらのルールがユーザーに適用されているかどうか、実際にユーザーでログインして参照できるかテストしましょう。
Apexアクションの「with sharing」と「without sharing」の違い
Apexクラスの宣言に「with sharing」または「without sharing」キーワードを記述します。この設定によって、クラス内で実行されるSOQLやDMLが、ユーザーの共有設定を尊重するかどうかが決まります。
動作の違いと権限不足への影響
「with sharing」が指定されたクラスは、呼び出し元ユーザーの共有ルールを適用します。そのため、権限不足が発生しやすい反面、セキュリティは高くなります。「without sharing」の場合は、システム権限(管理者権限)で動作し、すべてのレコードにアクセスできます。ただし、組織のセキュリティポリシーに反する可能性があるため、慎重に運用すべきです。トラブルが発生した場合、まずは「with sharing」のままで権限セットと共有設定を調整することを推奨します。
トラブルシューティング手順
以下に、Apexアクションで権限不足が発生した際の具体的な確認手順をまとめます。管理者権限が必要な操作も含まれますので、必要に応じてシステム管理者に依頼してください。
- エラーメッセージを確認する – 「Insufficient privileges」または「Access denied」などのスタックトレースから、不足している権限を特定します。
- 権限セットのApexクラス権限を確認 – 対象のApexクラスが権限セットで有効になっているか確認します。
- オブジェクト権限とフィールド権限を確認 – 操作対象のオブジェクトに対するCRUD権限と、必要な項目へのFLSが許可されているか確認します。
- 共有設定を確認 – 組織の共有設定が非公開でないか、共有ルールで必要なレコードにアクセスできるか確認します。
- Apexクラスのsharing指定を確認 – クラス定義がwith sharingかwithout sharingかを確認します。with sharingの場合は、上記の共有設定が厳格に適用されます。
- テストユーザーで動作確認 – 実際のユーザーと同じ権限セットを持つテストユーザーを作成し、Apexアクションを実行して再現性を確認します。
- システム管理者への依頼 – 上記を確認しても解決しない場合は、権限セットの見直しや共有ルールの追加を管理者に依頼します。
よくある失敗パターンと管理者への依頼内容
実際の現場で発生しやすい失敗と、その際に管理者へ伝えるべき情報を比較表にまとめました。
| 失敗パターン | 原因 | 管理者へ依頼する内容 |
|---|---|---|
| Apexクラス権限を付与していない | 権限セットでApexクラスが有効化されていない | 権限セットの「Apexクラスのアクセス」に対象クラスを追加 |
| オブジェクト権限が不足 | オブジェクトの読み取り権限がない | 権限セットの「オブジェクト設定」で当該オブジェクトの読み取り権限を追加 |
| 共有設定が非公開で、共有ルール未設定 | 組織の共有設定が非公開、または共有ルールが不足 | 共有ルールの追加、または権限セットで「すべてのデータの参照」権限を検討 |
| Apexクラスがwith sharingで、ロール階層外のレコードにアクセス | ユーザーのロールが対象レコード所有者のロールより下位、または別階層 | ロール階層の見直し、または共有ルールによるアクセス許可 |
よくある質問
Q: 権限セットを追加したのに、まだ権限不足エラーが出ます。なぜですか?
A: 権限セットの割り当てがユーザーに反映されるまでに数分かかることがあります。また、ブラウザキャッシュが原因の場合もあるため、一度ログアウトしてから再度ログインしてください。それでも解決しない場合は、他の権限セットやプロファイルが制限をかけていないか確認します。
Q: Apexクラスを「without sharing」に変更すれば解決しますか?
A: 権限不足は一時的に解消されますが、セキュリティ上のリスクが生じます。組織のポリシーでwithout sharingの使用が許可されていない場合もあるため、まずは権限セットや共有設定を適切に調整することをお勧めします。
Q: 共有ルールは誰が作成できますか?
A: 共有ルールの作成・編集はシステム管理者権限を持つユーザーのみ可能です。実際の業務運用では、管理者に依頼する際に「どのロール/グループに」「どのオブジェクトの」「どのレコードを共有したいか」を明確に伝えましょう。
まとめ
Apexアクションで権限不足が発生した場合、最初に権限セットのApexクラス権限とオブジェクト権限を確認してください。次に、Apexクラスのsharing指定に応じて、共有設定が適切かどうかを検証します。問題の多くは、権限セットの設定漏れか共有ルールの不足によって起こります。管理者への依頼時には、具体的なエラーメッセージや対象のApexクラス名、予期する動作を伝えることで、迅速な解決が期待できます。日頃から権限セットと共有設定の見直しを定期的に行い、ユーザーアクセス権の管理を徹底することが大切です。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
- 【Excel】矢印キーで「セルが動かず画面がスクロールする」!ScrollLockの解除方法(ノートPC対応)
- 【Teams】会議の「参加者リスト」を出席後にダウンロードする!誰が参加したか確認する手順
- 【Teams】画面共有時に「音声」も共有する方法!音が流れない時の設定手順
