この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Newer Version Available

This content describes an older version of this product. View Latest

WITH SECURITY_ENFORCED を使用した SOQL クエリの絞り込み

WITH SECURITY_ENFORCED 句を使用して、Apex コードの SOQL SELECT クエリ (サブクエリとクロスオブジェクトリレーションを含む) の項目およびオブジェクトレベルセキュリティ権限を確認できます。

Apex は一般に、システムコンテキストで実行されます。つまり、コード実行時に、現在のユーザの権限および項目レベルセキュリティは考慮されません。ただし、共有ルールは必ずスキップされるわけではありません。共有ルールを適用させないためには、必ず without sharing キーワードを使用してクラスを宣言する必要があります。前のリリースでも項目レベルセキュリティとオブジェクトレベルセキュリティの確認の実行は可能でしたが、この句はクエリ操作の冗長性と���術的な複雑性を大幅に削減します。この機能は、セキュリティを含む開発経験が少ない Apex 開発者と、権限エラーのグレースフルデグラデーションが不要なアプリケーション向けです。

WITH SECURITY_ENFORCED 句は Apex でのみ使用できます。45.0 より前の API バージョンの Apex クラスまたはトリガで WITH SECURITY_ENFORCED を使用することはお勧めしません。

メモ

WITH SECURITY_ENFORCED は、SELECT および FROM SOQL 句で参照している項目とオブジェクトについてのみ、項目およびオブジェクトレベルのセキュリティチェックを適用します。WHEREORDER BY 句からの参照先には適用されません。つまり、セキュリティは、クエリの実行に含まれているすべての要素ではなく、SOQL SELECT クエリが返すものに適用されます。

WITH SECURITY_ENFORCED 句を次のように挿入します。
  • WHERE 句がある場合はその前に挿入し、ない場合は FROM 句の後に挿入します。
  • ORDER BYLIMITOFFSET、または集計関数句がある場合はその前に挿入します。
SOQL SELECT クエリについての詳細は、『SOQL および SOSL リファレンス』の「SOQL SELECT の構文」を参照してください。
たとえば、ユーザが LastName 項目のアクセス権を持っている場合は、このクエリにより、Acme 取引先エントリの Id と LastName が返されます。
WITH SECURITY_ENFORCED を使用して多態的な参照項目を照会するときには、いくつかの制限があります。多態的な項目とは、複数のエンティティを参照できるリレーション項目です。
  • 多態的な項目のリレーションのトラバースは、WITH SECURITY_ENFORCED を使用したクエリではサポートされません。たとえば、ユーザエンティティおよびカレンダーエンティティの ID および所有者名を返す次のクエリでは WITH SECURITY_ENFORCED を使用できません。SELECT Id, What.Name FROM Event WHERE What.Type IN (’User’,’Calendar’)
  • ELSE 句と組み合わせた TYPEOF 式の使用は、WITH SECURITY_ENFORCED を使用したクエリではサポートされません。TYPEOF は任意の多態的なリレーションの種別について返される項目を指定するために SELECT クエリで使用されます。たとえば、次のクエリで WITH SECURITY_ENFORCED を使用することはできません。このクエリでは、取引先オブジェクトと商談オブジェクトで返される特定の項目と、他のすべてのオブジェクトで返される [名前] 項目と [メール] 項目を指定します。
  • 多態的な参照項目 OwnerCreatedByLastModifiedBy は、この制限から除外され、多態的なリレーションをトラバースできます。
  • AppExchange セキュリティレビューでは、WITH SECURITY_ENFORCED を使用するときに API バージョン 48.0 以降を使用する必要があります。機能がベータまたはパイロットだった API バージョンは使用できません。

SOQL SELECT クエリで WITH SECURITY_ENFORCED を使用して参照されている項目またはオブジェクトへのアクセス権限がユーザにない場合、System.QueryException が発生し、データは返されません。

ユーザオブジェクトでオブジェクト権限と項目権限を適用し、Experience Cloud サイトが含まれる組織でユーザの個人情報を他のユーザに非表示にするには、「オブジェクト権限と項目権限の適用」を参照してください。

LastName または Description いずれかの項目アクセスが非表示の場合、次のクエリでは権限が不十分であることを示す例外が発生します。

Website の項目アクセスが非表示の場合、次のクエリでは権限が不十分であること��示す例外が発生します。

Type の項目アクセスが非表示の場合、次の集計関数クエリでは権限が不十分であることを示す例外が発生します。