SOQL クエリの WITH SECURITY_ENFORCED を使用した項目およびオブジェクトレベル権限チェックの有効化 (正式リリース)

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

対象: この変更は、Enterprise Edition、Performance Edition、Unlimited Edition、および Developer Edition の Lightning Experience および Salesforce Classic に適用されます。

方法: 45.0 より前の API バージョンの Apex クラスまたはトリガで WITH SECURITY_ENFORCED を使用することはお勧めしません。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 を使用することはできません。このクエリでは、取引先オブジェクトと商談オブジェクトで返される特定の項目と、他のすべてのオブジェクトで返される [名前] 項目と [メール] 項目を指定します。
    SELECT 
    TYPE OF What 
       WHEN Account THEN Phone 
       WHEN Opportunity THEN Amount 
       ELSE Name,Email 
    END 
    FROM Event
  • 多態的な参照項目 OwnerCreatedByLastModifiedBy は、この制限から除外され、多態的なリレーションをトラバースできます。
  • AppExchange セキュリティレビューでは、WITH SECURITY_ENFORCED を使用するときに API バージョン 48.0 以降を使用する必要があります。機能がベータまたはパイロットだった API バージョンは使用できません。