salesforce force.comでのセキュリティー設定基本

前提

  • 用語の躓きとして、salesforceでのオブジェクトとはRDBのテーブルのことです。こんな前提もきちんと頭に入れておかないとマニュアル読んでるうちにわからなくなってきます。オブジェクトってORマッパでは行を表したりしますから余計混乱しますが、RDBに慣れている人にとって、「オブジェクト」は「テーブル」と読み替えるのは大前提です。本文では行のことは「レコード」と表現しています。salesforce的にもそうだと思います。
  • セキュリティー設定に関係なく、自分が保有するレコードはすべてCRUD可能である。それ以外の部分を設定するという方向でレコードレベルのセキュリティーは考える。
  • ロールとプロファイルがどういう関係になってるかを考えるときにどういう分け方が一番わかり易いかと考えたのですが、プロファイルで設定するものとプロファイルで設定しないものという分け方でまとめてみます。

プロファイルで設定するもの

  • オブジェクトレベルのセキュリティー
    • どのオブジェクトへのCRUDを許可するか?
  • 項目レベルセキュリティー
    • どのカラムへのCRUDを許可するか?

プロファイルで設定しないもの

  • レコードレベルのセキュリティー*1(プロファイルで設定せずに何によって設定するのかが以下の4つになります)
    • 組織全体のデフォルト(セキュリティーのコントロール >> 共有設定 >> 組織の共有設定)
      • ここで対象オブジェクトごとの基底レコードセキュリティーを設定する。
      • 他のレコードレベルセキュリティー(以下の3種)を実装することで、セキュリティーレベルを緩めることはできるが、上げることはできない。
    • ロール階層(ユーザの管理 >> ロール)
      • プロファイルとロールが混乱するのですが、ロールというのはプロファイルで設定できないレコードレベルセキュリティー設定方法の一つであると考えれば少しは整理されるかも。
      • 階層組織がしっかりした社内システム等での使用が想定されると思う。
      • ロールはユーザに付与するが、全ユーザに必ず付与しなくてならないものではない。
      • 一方プロファイルはユーザ作成時に必ず設定しなければならない。
      • ロールは階層構造になっており、上位ロールを付与されたユーザは自ロール以下に位置ずけられたロールに参加しているユーザの所有レコードと共有レコードにアクセスできるようになる。
    • 共有ルール(セキュリティーのコントロール >> 共有設定 >> 共有ルール)
      • 特定のユーザ、ロール、公開グループ*2に対して、例外を許可できます。
    • 共有の直接設定
      • レコード所有者が画面上から共有ボタンを押して誰と共有するかを選択すること。

プロファイル内のオブジェクト権限の「すべて変更」「すべて表示」チェックボックスについて

  • 上で書いたようにプロファイルではレコードレベルのセキュリティーを制御しないのですが、ここは例外で、この2つをチェックするとチェックされたオブジェクトの全レコードにアクセスできます。セキュリティーの概要を掴もうと実際試してみたとき、システム管理者プロファイルユーザでやってこの2つのチェックが付いてるばっかりにレコードレベルのセキュリティーの確認がうまくいかずにハマった。
  • オブジェクトの共有設定に関係なく、このプロファイルを持つユーザに、選択したオブジェクト種別の全レコードのフルアクセス権限を付与したい場合「すべて変更」にチェック。
  • オブジェクトの共有設定に関係なく、このプロファイルを持つユーザに、選択したオブジェクト種別の全レコードの参照アクセス権限を付与したい場合、「すべて表示」にチェック。

まとめ

標準オブジェクトに対するセキュリティーをデフォルトプロファイルでは制御してる。カスタムオブジェクトを使用する場合は自分でオブジェクトレベル項目レベルのセキュリティーをかけてあげることが必要。

なんか間違ってたら指摘してください。よろしくお願いいたします。
次回はセキュリティーをテストコードで確認する際のまとめ的なことを書こうかと思います。

余談

デフォルトロールはCEOを頂点にツリー階層で始めから存在しますが、邪魔な時は以下のSOQLで全消しできます。

userrole[] roles = [select id from userrole];
delete roles;

*1:レコードレベルセキュリティーが複数重複した場合は緩い方のセキュリティーレベルが適用される。

*2:ユーザ、ロール、他の公開グループをふくむことができるグループのこと。 この公開グループを共有ルールの例外適用対象とすることができます。