Salesforce Spring'20の新機能を試してみました!
この記事は Salesforce 開発者向けブログキャンペーンへのエントリー記事です。
久々に日本限定のキャンペーンが開催され、自称Salesforceキャンペーン芸人としては参加せざるを得ない、かなさんです。
この機会に、気になっていたけどまだ試せていなかった「Salesforce Spring ’20 の新機能」に挑戦してみました!
●注目の新機能「SOQLクエリの権限チェック」
「SOQL クエリの WITH SECURITY_ENFORCED を使用した項目およびオブジェクトレベル権限チェックの有効化 (正式リリース)」
Salesforce開発者のみなさまはご存知と思いますが、Apex はシステムコンテキストで実行されるため、すべてのオブジェクトと項目にアクセスできます。
そのため処理の前に実行ユーザが対象のオブジェクト、および、項目に必要な権限があるのかチェックする必要があるのですが、それが結構手間だったりします。
そのため、「 WITH SECURITY_ENFORCED」でチェックを省力化できるならと大分期待を寄せていました。
●検証のために行ったこと
確認用の項目を作成し、取得するSOQL(Apex)と表示用のVFを作成しました。詳細は1.~5.を参照ください。(結果だけ見たい人は次の●へ進んでください)
1.オブジェクトにカスタム項目「権限確認用項目」(C_Item_T_TestItem__c) を作成し、標準プロファイルは参照不可とした
2.Apexを作成
3.VFを作成
4.VFのカスタムタブを作成
5.アクセス権限のない、標準プロファイルユーザで動作確認
●結果
1.SOQLで取得する項目にアクセス権限がない項目が含まれる場合(VFの「データ取得」ボタンを押下し、ApexのgetAccountListを実行した結果)
⇒想定通り、エラーになりました。アクセス権のない項目は取得できません!
2.SOQLのWHERE句にアクセス権限がない項目が含まれていてる場合(VFの「データ取得2」ボタンを押下し、ApexのgetAccountList2を実行した結果)
⇒想定に反し、アクセス権のない項目で絞り込まれたデータが取得できてしまいました・・・。
開発ガイドに「WITH SECURITY_ENFORCED を使用できるのは、SELECT および WHERE SOQL 句に限られます」と記載があり、WHERE句では使えると思ったのですが、
英語版に切り替えてみたところWHERE句で使えるかどうか非常に怪しい感じでした(英語力のある方誰かお願いします)。
●まとめ
SOQLで項目およびオブジェクトのセキュリティをチェックする「WITH SECURITY_ENFORCED」は、現時点では使いどころが限られる機能であることが分かりました。
今後改良されて、将来的にはSOQLでのセキュリティチェックは「 WITH SECURITY_ENFORCED」を付けるだけでOKになってくれると良いなと思います。