Salesforceには権限設定がたくさんあり、用途に応じて使い分けが必要なのですが、どんな時にどの設定を使用すればいいのかたまに困惑してしまいます。
備忘録もかねて、以下の権限設定あたりを私なりにまとめてみました。

オブジェクトへのアクセス制御
オブジェクト権限
オブジェクト権限とは、
ユーザがアクセスできるオブジェクトと、そのオブジェクトのレコードに対してユーザが実行できるアクション(参照・作成・更新・削除)を制御するもの
です。
「設定>ユーザ>プロファイル」から、プロファイルごとに設定します。

オブジェクト権限は、Salesforceの数ある権限設定の中でも特に強い権限設定であり、オブジェクトに対する根本的なアクセス権を制御できるみたいです。
根本から遮断とは。。。
これは「最強の権限設定」ですね。
設定内容は以下のようになっています。
設定権限 | 内容 | ONの場合 | OFFの場合 |
---|---|---|---|
参照 | レコードの参照権限 | 参照可(共有設定に依存) | 参照不可 |
作成 | レコードの作成権限 | 作成可 | 作成不可 |
編集 | レコードの編集権限 | 編集可(共有設定に依存) | 編集不可 |
削除 | レコードの削除権限 | 削除可(共有設定に依存) | 削除不可 |
すべて表示 | 全レコードの参照権限 | 全レコード参照可 | 共有設定に依存 |
すべて変更 | 全レコードの編集権限 | 全レコード編集可 | 共有設定に依存 |
レコードへのアクセス制御
続いて、レコード単位でのアクセス制御です。
4つ順番に見ていきます。
組織の共有設定
組織の共有設定では、
誰がそのレコードにアクセスできるのか
を制御します。
「設定>セキュリティ>共有設定」からオブジェクトごとに設定します。

組織の共有設定では、レコードへのアクセス権を以下のように設定することができます。
設定 | レコードの参照 | レコードの編集 | レポートの実行 | 備考 |
---|---|---|---|---|
非公開 | レコードの所有者と 階層内でそのロールの上位にあるユーザのみ(※) | レコードの所有者と 階層内でそのロールの上位にあるユーザのみ(※) | レコードの所有者と 階層内でそのロールの上位にあるユーザのみ(※) | ※階層を使用したアクセス許可がONの場合 |
公開/参照のみ | すべてのユーザ | レコードの所有者と 階層内でそのロールの上位にあるユーザのみ(※) | すべてのユーザ | ※階層を使用したアクセス許可がONの場合 |
公開/参照・更新可能 | すべてのユーザ | すべてのユーザ | すべてのユーザ | – |
親レコードに連動 | 親レコードに依存 | 親レコードに依存 | 親レコードに依存 | – |
公開/参照・更新・所有権の移行 | すべてのユーザ | すべてのユーザ | すべてのユーザ | ケース・リードのみ |
公開/フルアクセス | すべてのユーザ | すべてのユーザ | すべてのユーザ | キャンペーンのみ |
組織の共有設定を設定するうえで押さえておく大切なことは、
組織の共有設定では、オブジェクト権限を越えるレベルの権限をユーザに付与できないということです。
つまり、オブジェクト権限で「参照不可」の設定になっているオブジェクトに対し、 組織の共有設定で「公開/参照のみ」を設定したとしても、該当のプロファイルのユーザがそのレコードを参照することはできないということです。
うーん、やっぱりオブジェクト権限は最強ですね。
ロール階層
ロールは基本的に共有設定と共に設定するし、
誰がそのレコードにアクセスできるのか
を制御します。
ロールは、ツリー形式(階層)になっていて、上の階層にいくほど権限の範囲が広くなります。課長より部長のほうが、部長より社長の方が権限が強いのと同じ考えですね。
ロールの特徴としてはこんな感じです↓
- 自分より上位のロールのユーザが所有者のデータは参照できない。
- 自分と同じ階層、自分よりも下位の階層のユーザが所有者のデータは参照できる。
ロール階層によるアクセス権の付与を行いたい場合は、共有設定の「階層を使用したアクセス許可」をONにします。
デフォルトではONになっているそうです。
共有ルール
共有ルールは、組織の共有設定の例外みたいなものととらえるのが分かりやすいですかね。
「設定>セキュリティ>共有設定」からオブジェクトごとに設定します。 (組織の共有設定の下の方にあります)

前述したようにレコードに対するアクセス権は基本的に、組織の共有設定とロールの組み合わせによって制御されます。
しかし、レコードのアクセス権をロールの階層構造外に拡大したい!もしくは、ロールやプロファイルが異なるユーザで構成された「グループ」に付与したい!といった時には、 共有ルール を作成して、共有設定やロールに例外を作ってあげる必要があるんですね。
共有ルールは以下の要素で構成されています。
- どのレコードを共有するか
- どのユーザと共有するか
- どのアクセス権を付与するか(参照のみ/参照・更新)
とてもシンプル。
組織の共有設定とロールと共有ルールを組み合わせることで、レコードへのアクセス権を細かく制御することが可能になります。
共有の直接設定
ここまで、レコードへのアクセス権制御の方法として、「組織の共有設定」、「ロール」、「共有ルール」を見てきましたが、もう一つの方法として「共有の直接設定」があります。
共有の直接設定は以下の方法で行います。
- 「共有ボタン」による設定
- Apexによる設定
まず、「共有ボタン」による設定ですが、レコードの詳細ページの共有ボタンを押下して、そのレコードの共有先を指定します。
レコード詳細の「共有ボタン」 を押下。

ここで共有先を指定します↓

続いてApexによる制御ですが、それぞれのオブジェクトに対応するshareオブジェクトを使用します。
こちらはまた別途まとめることにします。
公式のレファレンスはこちらです >> 「Apexを使用したレコードの共有」
項目へのアクセス制御
項目レベルセキュリティ
さて最後は、項目のアクセス制御です。
オブジェクト権限が、ユーザのオブジェクトに対する権限を制御するのに対し、項目レベルセキュリティは、
オブジェクトの項目に対する権限(参照・編集権限)を制御
します。
「設定>ユーザ>プロファイル>」、もしくは各オブジェクトの項目から設定します。
使い方の例としては以下のような感じです。
まとめ
今回はそれぞれの権限設定の概要をざっくりとまとめてみましたが、
どのようにそれらの設定をくみ上げていけばいいのかについても今後整理していきたいと思います。
権限周りは本当にややこしいですね。。。
コメント