設問
Universal Containers (UC) では、Apexクラスが読み取り専用の商談フィールドを更新しようとしている問題があります。このApexクラスは、特定のユーザーのプロファイルによって制限されたフィールドにアクセス・更新しようとしています。アーキテクトとして、このFLS違反をどのように防ぐべきでしょうか?
選択肢
A. With Sharing キーワードを使用するクラスにコードを配置します。
B. 更新を許可する前に、isUpdateable() Apex メソッドを使用して各項目をテストします。
C. SOQL ステートメントで WITH SECURITY_ENFORCED キーワードを使用します。
D. With Sharing キーワードをクラスに追加します。
解答
C. SOQL ステートメントで WITH SECURITY_ENFORCED キーワードを使用します。
解説
A. With Sharing キーワードを使用するクラスにコードを配置します。
不正解です。with sharing はレコード共有ルールに基づくアクセス制御(所有者ベース)を尊重するもので、フィールドレベルセキュリティ(FLS)とは無関係です。FLSを強制したい場合には効果がありません。
B. 更新を許可する前に、isUpdateable() Apex メソッドを使用して各項目をテストします。
不正解です。この方法でもFLSチェックは可能ですが、開発者がすべての対象フィールドに対して手動で実装しなければならないためエラーの温床になります。
さらに、SOQL実行時のセキュリティ違反は防げないため、完全ではありません。
C. SOQL ステートメントで WITH SECURITY_ENFORCED キーワードを使用します。
正解です。このキーワードをSOQLに追加すると、ユーザーにアクセス権のないフィールドやオブジェクトを含むクエリは実行時にエラーになります。
開発者がFLSチェックコードを書く必要がなく、セキュリティと可読性の両面で優れています。AppExchange申請時にも推奨されます。
D. With Sharing キーワードをクラスに追加します。
不正解です。このキーワードはレコードの可視性(共有モデル)に影響するだけで、フィールドレベルの読み取り・更新可否は制御しません。FLSの強制には無関係です。
第120問
こちらをクリック