(最終更新月: 2023年12月)
✔以下の疑問をお持ちの方へ向けた記事です
「SalesforceでApexクラスに対する権限はどのように設定するのだろうか?」
「Apexクラスの権限設定の基本的な手順を知りたい」
「Apexクラスへのアクセス権限を設定する際のベストプラクティスが見たい」
✔この記事を読むことで得られる知識
- SalesforceにおけるApexクラスへのアクセス権限の設定方法
- Apexクラスの権限設定のためのステップバイステップガイド
- 権限設定時の注意点とベストプラクティス
当記事では、Salesforceのセキュリティモデルの一環として、Apexクラスへのアクセス権限をどのように設定するかについて詳しく解説します。
セキュリティを確保しながら柔軟なアクセス制御を実現するためのベストプラクティスについても触れます。
Salesforceの管理者や開発者にとって役立つ内容です。
ぜひ最後までご覧ください。
Salesforce Apexクラスの基本
こちらでは、Salesforceのプログラミング言語であるApexクラスについてお伝えしていきます。
Apexクラスを理解することで、開発効率の向上とカスタマイズされたビジネスロジックの実装が可能です。
- Apexクラスとは何か
- Salesforce内でのApexの役割
- Apexクラスの構造と機能
Apexクラスとは何か
Apexクラスとは、Salesforce上で動作する独自のオブジェクト指向プログラミング言語に基づいたコードの単位です。
Javaに似た文法を持ち、データベース操作やロジックの実行といった多岐にわたる処理をサーバーサイドでおこなえます。
例えば、以下のコードはシンプルなApexクラスのサンプルです。
public class MyFirstApexClass {
public String sayHello() {
return 'Hello, World!';
}
}
クラスがMyFirstApexClass
と定義され、sayHello
というメソッドを持っています。
Salesforce内でのApexの役割
Salesforceでは、Apexはカスタムビジネスロジックの作成を可能にします。
ワークフローやバリデーションルールでは実現できないような複雑な要求に応えれるのです。
例えば、特定の条件下でのレコード操作や複数オブジェクト間の関連操作などがApexによって実装されます。
以下は、Apexトリガやバッチクラスを使用して、データ操作を自動化するコード例です。
trigger AccountTrigger on Account (before insert) {
for(Account acc : Trigger.new) {
// 特定のロジックでAccountレコードを更新する
}
}
このトリガーは、新しいアカウントがSalesforceに挿入される前に特定の処理をおこなうように設定されています。
Apexクラスの構造と機能
Apexクラスの構造には、以下が含まれます。
- メソッド: 特定の操作をおこなう
- 変数: データを格納する
- コンストラクタ: クラスが初期化された際に実行される特殊なメソッド
以下に基本的なApexクラスの骨格としてのコード例を示します。
public class MyClass {
private Integer myVariable;
/** コンストラクタはクラス名と同じ名前で宣言 */
public MyClass(Integer initialValue) {
myVariable = initialValue;
}
/** メソッド */
public Integer multiplyByTwo() {
return myVariable * 2;
}
}
MyClass
には、以下が定義されています。
- 整数値を保存するためのプライベート変数
myVariable
- クラスのインスタンス化時に値をセットするコンストラクタ
- 値を2倍にして返すメソッド
Apexクラスの権限とは
Apexクラスの権限について説明します。
Apexクラスを理解し、正しく権限を設定することで、システムの安全性の確保と正確なデータアクセス制御が可能です。
- 権限の基本概念
- Salesforce内での権限の重要性
- 権限とセキュリティの関係
- Apexクラスの権限と定義の構文
権限の基本概念
Apexクラスにおける権限とは、ユーザーが特定のクラスやメソッドを実行できるかどうかを制御するための設定です。
クラスごとではなく、メソッドごとにも細かくアクセス権を管理できます。
例として、以下のglobal
キーワードは、そのメソッドが組織全体で利用可能であることを意味します。
global class MyGlobalClass {
global void myGlobalMethod() {
// 全員がアクセス可能なメソッドの内容
}
}
このケースでは、myGlobalMethod
メソッドはSalesforceの任意の場所から呼び出せます。
メソッドや内部クラスをglobalとして宣言したら、最上位クラスもglobalとして宣言が必要です。(参考: Apex クラス定義|Apex開発者ガイド)
ただし公式サイトでもglobalアクセス修飾子はあまりおすすめされていません。理由は依存関係の維持が困難になるからです。
Salesforce内での権限の重要性
Salesforce内で権限を適切に管理することは、データのセキュリティを維持する上で極めて重要です。
間違った権限設定により、以下のようなことがありえます。
- 意図しないデータへのアクセス
- 作業者に余計な心配をかける
- ビジネスプロセスの乱れ
Apexクラス内で実行されるメソッドが大事なデータにアクセスする場合、適切なユーザーだけがそのメソッドを実行できるようにする必要があります。
以下の構文は、限定されたユーザーへのアクセスの設定例です。
public with sharing class SensitiveDataClass {
// このクラス内のメソッドは、共有ルールに基づいてアクセスが制限されます。
}
with sharing
キーワードにより、ユーザーの役割や権限、共有設定に従ってアクセス制御がおこなわれます。
権限とセキュリティの関係
Salesforceにおける権限設定は、セキュリティポリシーを実現するうえでの基盤を形成します。
権限はそのままユーザーが実行可能な操作の範囲を定義するため、適切に管理されなければ重大なセキュリティリスクに繋がるからです。
例えば、Apexクラス内でシステム変更の権限が与えられている場合、そのクラスを実行できるユーザーには厳格なアクセス制御が必要になります。
以下のコードは、システム管理者のみが特定の処理をおこなえるように制限する方法の一例です。
public with sharing class AdminOperationsClass {
public void performCriticalOperation() {
// システム管理者のIDを確認
if(UserInfo.getProfileId() == '00e1x000000i5Tj') {
// 運用環境に影響を与える重要な処理
} else {
throw new InsufficientPrivilegesException('You do not have permission to perform this operation.');
}
}
}
この例では、ユーザーがシステム管理者のプロファイルIDを持っている場合のみ、重要な操作を実行できるようになっています。
このように厳格さを用いることも必要ですが、ユーザーIDの変更によるコードの改修の頻度なども考慮に入れる必要があります。
長い目で見てどのように実装するかは要件定義次第といえるでしょう。
Apexクラスの権限と定義の構文
Apexクラスとその権限を表すには、以下の構文を理解しましょう。
アクセス修飾子 定義修飾子 class クラス名 [インターフェース] { //クラス定義 }
以下は、アクセス修飾子、定義修飾子に含められるキーワードをまとめたものです。
種別 | 構文要素 | 説明 |
---|---|---|
アクセス 修飾子 | private | クラスがローカルでのみ表示されることを宣言します。 内部クラスではデフォルトでこの設定です。 内部クラスまたは @IsTest アノテーションでマークされた最上位のテストクラスでのみ使用可能。 |
アクセス 修飾子 | public | クラスがアプリケーション全体や名前空間で表示されることを宣言します。 |
アクセス 修飾子 | global | クラスがすべてのApexコードで表示されることを宣言します。webservice キーワードで定義されたメソッドを含むすべてのクラスはこの設定が必要です。また、メソッドや内部クラスが global である場合、最上位クラスも global でなければなりません。 |
定義 修飾子 | with sharing | クラスが共有モードを持ち、Salesforceの共有ルールを尊重することを宣言します。 |
定義 修飾子 | without sharing | クラスが共有モードを持たず、Salesforceの共有ルールを無視することを宣言します。 |
定義 修飾子 | virtual | クラスが拡張やメソッドの上書きを許可することを宣言します。virtual が指定されていない場合、override キーワードを使用したメソッドの上書きはできません。 |
定義 修飾子 | abstract | クラスが抽象メソッド(署名のみで本文がないメソッド)を含むことを宣言します。 |
アクセス修飾子はクラスの可視性、定義修飾子は動作を指定するものです。
Apexクラス権限の設定方法
こちらでは、SalesforceのApexクラスにおける権限設定方法について詳しく見ていきます。
適切な権限設定をおこなうことにより、セキュリティを保ちつつ柔軟なデータアクセスの提供が可能です。
- プロファイルを通じた権限の設定
- 権限セットを使用したアクセス制御
- ユーザーレベルでの権限の管理
プロファイルを通じた権限の設定
Salesforceのプロファイルは、ユーザーの役割ごとにシステム上での動作をコントロールするための原則です。
プロファイルを通じて、Apexクラスへのアクセス権限を設定できます。
例えば、システム管理者にのみApexクラスを実行する権限を与えたい場合、以下のステップで設定を行います。
- 「セットアップ」を開き「プロファイル」を検索します。
- 対象とするプロファイル(例:「システム管理者」)を選びます。
- 「有効なApexクラス」セクションまでスクロールし、「編集」をクリックします。
- 実行を許可するApexクラスにチェックを入れて保存します。
上記の方法で、特定のプロファイルに紐づくユーザー群に対してApexクラスへのアクセスを設定できます。
権限セットを使用したアクセス制御
権限セットは、プロファイル以外で個々のユーザーに対して詳細な権限を追加するものです。
Apexクラスにアクセス権を与えたり、アクセスを制限したりするために権限セットを利用します。
権限セットを使用する際におこなう手順は以下のとおりです。
- 「セットアップ」から「権限セット」を検索・選択します。
- 新しい権限セットを作成するか、既存のものを選びます。
- 「Apexクラスアクセス」に移動し、「編集」をクリックします。
- アクセス権を与えるApexクラスを選択し、保存します。
この手順により、個別のユーザーまたは小規模なユーザーグループに対して精密なアクセス権の設定が可能です。
権限セットは、プロファイルに上乗せできる権限の塊のこと。
取り外しができるため、いくつかの権限セットを作っておくととても便利です。
ユーザーレベルでの権限の管理
ユーザーレベルでの権限管理は、個々のユーザーのニーズに基づいた柔軟なアクセス制御を実現します。
とくに、一時的なプロジェクトや例外的なケースにおいて役立つでしょう。
ユーザーレベルでのアクセス権限を設定する際の一般的な方法は次のようになります。
- 「ユーザー」セクションを「セットアップ」から検索します。
- アクセス権限を管理したいユーザーのプロファイルを開きます。
- 「権限セットの割り当て」セクションに移動し、適切な権限セットを割り当てます。
この方法を使用することで、特定の状況下で必要なユーザーのみに限定されたアクセス権限を提供できます。
ユーザーには、プロファイルが必ずひとつ紐付けられます。
権限セットは0から複数個が可能です。
適切な権限を調整するのに使い分けましょう。
ただしプロファイルで指定されている権限を権限セットで取り外すことはできません。
Apexクラス権限のベストプラクティス
こちらでは、SalesforceのApexクラスに関する権限管理におけるベストプラクティスを詳しく説明します。
適切な権限設定は、システムの不正使用を防ぐとともに、継続的なシステム保守を支えてくれるでしょう。
- セキュリティと権限のバランス
- 効率的な権限管理のための戦略
- よくある権限設定の間違いとその回避
セキュリティと権限のバランス
セキュリティを維持しつつ、必要な権限を持つユーザーが効率良く作業できるようなバランスが大切です。
最小特権の原則を適用し、システムへのアクセスは業務上必要な最低限に留めましょう。
管理の例としては、以下のような方法が挙げられます。
- 業務をおこなうメンバーをグループにカテゴライズしてそれぞれのカスタムプロファイルを作る
- プロファイル権限でのアクセスを厳格にし、権限セットで必要なものだけ上乗せする
- 開発と業務など大まかに分け、それぞれのプロファイルを明確にする
効率的な権限管理のための戦略
権限管理を効率化するためには、ロールと権限のマッピングを明確にしましょう。
それに基づいてプロファイルと権限セットを設定することが重要です。
また、規則的に権限のレビューをおこない、過剰な権限が付与されていないかをチェックすることも効果的です。
権限変更があるたびに、それがセキュリティポリシーに沿っているかを監査し、ドキュメント化することもベストプラクティスに含まれます。
SFDXを活用し、プロファイルや権限セットをコード化しておくと差分がわかりやすくて便利です。
よくある権限設定の間違いとその回避
権限設定においてよくある間違いには、以下のようなものがあります。
- 不要な権限の放置
- 不明瞭な権限設定
- 権限の過剰付与
これらの間違いを回避するためには、定期的な権限監査、権限変更の監視、ユーザートレーニングといった対策が効果的です。
セキュリティインシデント後のレビューや定期的な教育プログラムを通して、ユーザーが自身の権限とその使い方を理解しているかを確認することも有効です。
トラブルシューティングとサポートブルシューティングとサポート
Apexクラスや権限の設定において生じる問題の解決策や、Salesforceのサポート体制についてご紹介します。
問題発生時の対応方法を把握し、Salesforceコミュニティや追加リソースを活用して解決に導きましょう。
- 一般的な権限関連の問題と解決策
- Salesforceコミュニティの活用
- 追加のリソースと支援
一般的な権限関連の問題と解決策
Apexクラスの権限設定に際しては、頻繁に遭遇するいくつかの問題があります。
例えば、「不能な操作」エラーや「アクセス拒否」のメッセージが表示される場合、正しい権限が与えられていないことが原因かもしれません。
以下は、一般的な問題とその解決策です。
問題: ユーザーが必要なApexクラスにアクセスできない。
解決策: ユーザーのプロファイルと権限セットを見直し、適切なApexクラスへのアクセス権が設定されているか確認します。
問題: Apexクラスで実行される処理が予期しない挙動をする。
解決策: クラスの共有設定を確認し、「with sharing」あるいは「without sharing」が適切に使用されているか検証します。
Salesforceコミュニティの活用
Salesforceコミュニティは、Salesforceユーザーが知識を共有し合う貴重なリソースです。
権限問題に関しては、Trailblazer CommunityやDeveloper Forumsが有用でしょう。
実際のケーススタディやベストプラクティスを学び、ほかのユーザーの経験から学べます。
また、特定の問題に直面した際には、同様の課題を解決したユーザーのアドバイスを求められるのも特徴です。
追加のリソースと支援
Salesforceには、トラブルシューティングを支援するために多くの追加リソースが用意されています。
- 公式ドキュメンテーション
- オンライン学習プラットフォームのTrailhead
- コンサルティングパートナー
- 認定専門家によるヘルプデスク
また、アップデートや新機能に関する公式のリリースノートも重要な情報源となり、問題発生時の参考になります。
まとめ
SalesforceのApexクラスとその権限について詳細に解説しました。
基本的な概念から権限設定の方法、ベストプラクティスまでをカバーし、トラブルシューティングへの対応法も紹介しました。
これらの知識とリソースを利用して、安全かつ効果的にApexクラスを使用していただけることを願っています。
Salesforceの世界でさらなる成功を収めるためにも、これらの情報を積極的に参考にしてください。