Salesforceのアクセス権設定は、レコードを管理する際に避けて通れない重要な要素です。
この記事ではSalesforceのアクセス権を理解するうえで基本かつ重要となるオブジェクト権限とレコードの共有設定について解説します。
Salesforceのアクセス権の基本構造
アクセス権を設計する前に整理すること
Salesforceのレコードのアクセス権を考える時に以下の2つの軸が存在します。
- どのレコードを誰が作成・参照・編集・削除できるか(オブジェクト権限)
- どのレコードに誰がアクセスできるか(共有設定)
Salesforceのアクセス権設定が複雑に見えるのは、この2つの設定が混乱してしまうからです。
そこでまずはこの2つが別物の権限であると理解して、1つずつ考えていきましょう。
ここからは2つの権限を分かりやすく説明するために、「営業部」に所属するユーザに対してそれぞれどのような権限を設計するかというシナリオで進めていきます。
どのレコードを誰が作成・参照・編集・削除できるか = オブジェクト権限
まずどのレコードを誰が作成・参照・編集・削除できるか について解説します。
オブジェクト権限では大まかに以下の設定を考える必要があります。
- どのオブジェクトにアクセスできるようにするか(取引先や商談の情報を見る必要はある? など)
- アクセスできるユーザーにオブジェクトのどんな操作が必要か(取引先のレコードを編集させる? 商談を自分で作成する? など)
- 項目レベルセキュリティ(取引先レコードの「口座番号」項目の値を参照・編集できるようにする? など)
このオブジェクト権限の設定はプロファイルか、もしくは権限セットで設定します。
これまでのオブジェクト権限はプロファイルと権限セットのどちらでも設定できましたが、Spring’ 26よりプロファイルの権限のサポートが終了することになりました。
サポート終了後の権限は権限セットおよび権限セットグループのみ対応するようになるため、これから権限設計をする場合は権限セットを使用することを強くお勧めします。
公式ブログ:権限の更新
ユーザー管理に関する管理者のベストプラクティス
オブジェクト権限は権限セットでは以下のように設定します。
オブジェクト権限で気を付けなければならないのは、「参照・作成・編集・削除」で設定できるのは自分が所有者となっているレコードのみが対象ということです。
後述の共有設定で詳しく解説しますが、たとえば取引先のレコードの共有設定が「非公開」でロールや共有ルールがない=自分の所有しているレコードしかアクセスできない状態の場合、あくまでも編集したり削除したりできるのは自分のレコードだけということです。
ただし、4つの権限の下部にある「すべて表示」「すべて変更」が付与されている場合、共有設定に関係なく、誰のレコードでも表示・変更(編集・削除)が可能です。
どのレコードに誰がどのようなアクセスできるか = 共有設定
次に、どのレコードに誰がどのようなアクセス権を持つかについて説明します。
共有設定では次のことを考える必要があります。
- このオブジェクトのレコードは誰でもアクセスしていいか(全員表示? 全員編集可能? 一部のユーザーだけ? など)
- 一部のユーザーだけがアクセスできる場合は、どんな人がどのレコードにアクセスできるか(営業部長は部内全員のレコードにアクセスさせる? ステータスが「成立」の商談は営業部全員がアクセスできるようにする? など)
- パートナーや顧客のような外部ユーザーのレコードへのアクセス権
Salesforceの公式では権限のメカニズムを以下のような図で説明しています。
この図はSalesforceのレコードのアクセス権が左から右に向かって拡張されていることを表現しています。
つまりOWD(組織の共有設定)で設定されたアクセス権ではレコードへの権限が最も厳しく、それをRole Hierarchy(ロール階層)やSharing Rules(共有ルール)、Manual Sharing(共有の直接設定)で徐々に緩めています。
オブジェクト権限の「すべて参照」「すべて変更」が付与されている場合、共有設定は無視され、そのオブジェクトのレコードすべてへのアクセス権が付与されます。
「すべてのデータの編集」権限が付与されたユーザは共有設定に関係なく、全オブジェクトの全レコードを参照から削除までできるようになります。
プロファイルで「すべて変更」権限が付与されていないオブジェクトであっても、自動的に権限が付与されます。
以下より、それぞれの設定について説明します。
- 組織の共有設定
-
組織の共有設定は[設定] > [共有設定]からアクセスします。
標準オブジェクトの場合は実際はオブジェクトごとに細かく異なる場合もありますが、ざっくり説明すると以下のようになります。公開/参照・更新可能 … 誰でも参照・編集・削除可能
公開/参照のみ … 誰でも参照できるが編集・削除は不可
非公開 … 所有者以外アクセス不可
親レコードに連動 … 参照関係のレコードの場合、親オブジェクトに設定されたアクセス権と同じアクセス権になるたとえばアクセス権が「公開/参照のみ」となっているオブジェクトに対して、オブジェクト権限の「参照」「編集」を持っているユーザーは、このオブジェクトのレコードをすべて参照できますが、編集できるのは自分が所有しているレコードだけです。
なお、主従関係の「従」オブジェクトの共有設定は必ず「主」オブジェクトと一緒となり、独自に設定できません。
- ロール階層
-
ロール階層は自分が所有しているレコードをロール階層が上位になっているユーザーに参照・編集権限を付与します。
アクセス権があるのはあくまでも下位ロールのユーザーのレコードだけで、同じロール内や別階層のロールのユーザーのレコードはアクセスできません。
たとえばロール階層が営業部部長 > 営業1課課長 > 営業1課となっていた場合、営業部部長は営業1課課長と営業1課のユーザーのレコードはアクセスできます。
一方で、もし営業部部長と同レベルの企画部部長というロールがあり、その下位に企画部というロール階層が存在していた場合、営業部部長は企画部部長のレコードも企画部のレコードもアクセスできません。ロール階層を適用する場合は、共有設定の右側にある「階層を使用したアクセス許可」のチェックボックスをONにしてください。
このチェックボックスを変更できるのはカスタムオブジェクトのみで、標準オブジェクトは基本的にすべてONの状態から変更できません。 - 共有ルール
-
共有設定が「非公開」となっているオブジェクトに対して、例外を設定する = ある特定のユーザに対してのみレコードのアクセス権を付与します。
共有ルールには大きく分けて2種類あります。- レコードの所有者に基づくルール … レコードの所有者を基準にして、そのレコードを誰にアクセスさせるか決定します
例)営業課ロールのユーザーが所有するレコードを「監査チーム」という公開グループに所属するユーザーにアクセスさせる - 条件に基づくルール … ある条件に一致するレコードを特定のユーザーにアクセスさせるか決定します
例)商談のステータスが「成立」のレコードを「すべての内部ユーザー」にアクセスさせる
ここで設定できるアクセスレベルは「参照のみ」と「参照・更新」があり、どのレコードを誰にどこまでアクセスさせるか設定できます。
- レコードの所有者に基づくルール … レコードの所有者を基準にして、そのレコードを誰にアクセスさせるか決定します
- 共有の直接設定
-
上記のように自動的にアクセス権を付与するのではなく、レコードの所有者やレコードの変更権限のあるユーザーが「参照のみ」レベルのレコードや「非公開」レベルのレコードを、本来は権限を持たないユーザーやグループ、ロールなどに対してアクセスできるようにする機能です。
なお、このアクセス権はレコードの所有者が変更されると自動的に削除されてしまうので注意してください。レコードの詳細ページの「共有」アクションをクリックしましょう
レコードのアクセス権を付与する方法は、これ以外にもApexによる共有や、ケースの「キュー」、商談の「チーム」など様々な方法があります。
今回は権限を理解する最初の一歩として、代表的な4つを説明しました。
アクセス権のよくある質問と考慮事項
「すべて変更」が付与されているオブジェクトの項目レベルセキュリティはどうなる?
項目レベルセキュリティはオブジェクト権限から独立した権限です。
たとえ「すべて変更」や「すべてのデータの編集」の権限が付与されていても、項目レベルセキュリティで参照アクセス権や編集アクセス権がない項目は、表示したり編集したりすることはできません。
「すべて表示」および「すべて変更」権限の概要
階層を使用したアクセス許可の考慮事項
「階層を使用したアクセス許可」の設定は2種類あります。
1つは共有設定のオブジェクト単位の設定で、もう1つは公開グループなどにあります。
この「階層を使用したアクセス許可」がONになっている場合、ロールだけでなく公開グループやテリトリーの階層のアクセス許可も有効になります。
たとえば共有ルールでレコードの共有先に公開グループを指定している場合、その公開グループの「階層を使用したアクセス許可」がONになっていると、グループのメンバーだけでなくメンバーの上位階層のユーザーにもアクセス権が付与されます。
この現象を避けて公開グループのメンバーのみにアクセス権を付与したい場合は、公開グループの「階層を使用したアクセス許可」をOFFにしておく必要があります。
階層を使用したアクセス許可の設定によっては、想定外のユーザーにレコードのアクセス権が付与される可能性があるため、設定はしっかり確認しましょう。
共有ルールが設定できない、もしくは「共有」アクションが表示されない
レコードのアクセス権の例外を設定する「共有ルール」や「共有」アクションは以下の場合には表示されません。
- オブジェクトの共有設定が「公開/参照・更新可能」になっている
- オブジェクトが主従関係の従オブジェクト
なお上記のパターンは「Apexによる共有」も無効になりますので注意してください。
複雑な階層や共有ルール、共有の直接設定への考慮事項
複雑な階層設定や膨大な共有ルールの作成はレコードへのアクセスに影響することがあります。
レコードのアクセス権は、実は表側には表示されないShareオブジェクトのレコードを使用して実装しています。
共有ルールを設定したり、共有設定やロール階層を変更するたびにこのShareレコードが作成・更新・削除されることになるため複雑な組織では共有の適用に時間がかかってしまいます。
親レコードに対して多数の子レコードが紐づいているときも同様の現象が発生します。
たとえば一つの取引先に対して10000件以上の商談を作成されている場合の共有の直接設定は非推奨とされています。
組織のパフォーマンスのためにも、複雑な設計や大量レコードの紐付けには十分注意してください。
共有の直接設定に関する考慮事項
まとめ
以上がSalesforceのアクセス権についての解説です。
ここで触れた内容は、Salesforceの共有設定を理解するうえで基本となるものです。
この基本内容を理解し、最適なアクセス権の設計を行いましょう。