KanaLog~かなさんのSalesforce関連ログ~

自称「Salesforceキャンペーン芸人」のKanaさんのSalesforceに関する活動記録です。

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を作成

f:id:endoukanako:20200323000450p:plain

3.VFを作成

f:id:endoukanako:20200323000514p:plain

4.VFのカスタムタブを作成

5.アクセス権限のない、標準プロファイルユーザで動作確認

 

●結果

1.SOQLで取得する項目にアクセス権限がない項目が含まれる場合(VFの「データ取得」ボタンを押下し、ApexのgetAccountListを実行した結果)

⇒想定通り、エラーになりました。アクセス権のない項目は取得できません!

f:id:endoukanako:20200323002551p:plain

 

2.SOQLのWHERE句にアクセス権限がない項目が含まれていてる場合(VFの「データ取得2」ボタンを押下し、ApexのgetAccountList2を実行した結果)

⇒想定に反し、アクセス権のない項目で絞り込まれたデータが取得できてしまいました・・・。

f:id:endoukanako:20200323002708p:plain

 

開発ガイドに「WITH SECURITY_ENFORCED を使用できるのは、SELECT および WHERE SOQL 句に限られます」と記載があり、WHERE句では使えると思ったのですが、

英語版に切り替えてみたところWHERE句で使えるかどうか非常に怪しい感じでした(英語力のある方誰かお願いします)。

 

●まとめ

SOQLで項目およびオブジェクトのセキュリティをチェックする「WITH SECURITY_ENFORCED」は、現時点では使いどころが限られる機能であることが分かりました。

今後改良されて、将来的にはSOQLでのセキュリティチェックは「 WITH SECURITY_ENFORCED」を付けるだけでOKになってくれると良いなと思います。